@opendaw/studio-core 0.0.46 → 0.0.48
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/dist/EffectFactories.js +1 -1
- package/dist/Engine.d.ts +1 -1
- package/dist/Engine.d.ts.map +1 -1
- package/dist/EngineFacade.d.ts +2 -2
- package/dist/EngineFacade.d.ts.map +1 -1
- package/dist/EngineFacade.js +3 -3
- package/dist/EngineWorklet.d.ts +1 -1
- package/dist/EngineWorklet.d.ts.map +1 -1
- package/dist/EngineWorklet.js +17 -6
- package/dist/InstrumentBox.d.ts +2 -2
- package/dist/InstrumentBox.d.ts.map +1 -1
- package/dist/InstrumentFactories.d.ts +2 -0
- package/dist/InstrumentFactories.d.ts.map +1 -1
- package/dist/InstrumentFactories.js +13 -2
- package/dist/processors.js +11 -11
- package/dist/processors.js.map +4 -4
- package/dist/project/Project.d.ts +6 -1
- package/dist/project/Project.d.ts.map +1 -1
- package/dist/project/Project.js +28 -1
- package/dist/project/ProjectApi.js +1 -1
- package/dist/ui/TimeGrid.d.ts +19 -0
- package/dist/ui/TimeGrid.d.ts.map +1 -0
- package/dist/ui/TimeGrid.js +74 -0
- package/dist/ui/index.d.ts +1 -0
- package/dist/ui/index.d.ts.map +1 -1
- package/dist/ui/index.js +1 -0
- package/dist/workers-main.js +2 -2
- package/package.json +15 -15
package/dist/EffectFactories.js
CHANGED
|
@@ -113,7 +113,7 @@ export var EffectFactories;
|
|
|
113
113
|
};
|
|
114
114
|
EffectFactories.Fold = {
|
|
115
115
|
defaultName: "Fold",
|
|
116
|
-
defaultIcon: IconSymbol.
|
|
116
|
+
defaultIcon: IconSymbol.Fold,
|
|
117
117
|
description: "Folds the signal back into audio-range",
|
|
118
118
|
separatorBefore: false,
|
|
119
119
|
type: "audio",
|
package/dist/Engine.d.ts
CHANGED
|
@@ -25,7 +25,7 @@ export interface Engine extends Terminable {
|
|
|
25
25
|
get metronomeEnabled(): ObservableValue<boolean>;
|
|
26
26
|
get playbackTimestamp(): ObservableValue<ppqn>;
|
|
27
27
|
get playbackTimestampEnabled(): MutableObservableValue<boolean>;
|
|
28
|
-
get
|
|
28
|
+
get countInBarsTotal(): ObservableValue<int>;
|
|
29
29
|
get countInBeatsRemaining(): ObservableValue<number>;
|
|
30
30
|
get markerState(): ObservableValue<Nullable<[UUID.Bytes, int]>>;
|
|
31
31
|
get project(): Project;
|
package/dist/Engine.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Engine.d.ts","sourceRoot":"","sources":["../src/Engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,kBAAkB,CAAA;AACrC,OAAO,EACH,GAAG,EACH,sBAAsB,EACtB,QAAQ,EACR,eAAe,EACf,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,IAAI,EACP,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAC,gBAAgB,EAAE,UAAU,EAAC,MAAM,0BAA0B,CAAA;AACrE,OAAO,EAAC,OAAO,EAAC,MAAM,mBAAmB,CAAA;AAEzC,MAAM,WAAW,MAAO,SAAQ,UAAU;IACtC,IAAI,IAAI,IAAI,CAAA;IACZ,IAAI,IAAI,IAAI,CAAA;IACZ,WAAW,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAA;IACjC,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;IAC7C,aAAa,IAAI,IAAI,CAAA;IACrB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACxB,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC,CAAA;IACxC,IAAI,IAAI,IAAI,CAAA;IACZ,KAAK,IAAI,IAAI,CAAA;IACb,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAAA;IACpC,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,YAAY,CAAA;IAC5D,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;IACxC,gBAAgB,CAAC,OAAO,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAA;IAC1D,gBAAgB,CAAC,QAAQ,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAA;IAC3D,yBAAyB,CAAC,QAAQ,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GAAG,YAAY,CAAA;IAE7E,IAAI,QAAQ,IAAI,eAAe,CAAC,IAAI,CAAC,CAAA;IACrC,IAAI,SAAS,IAAI,eAAe,CAAC,OAAO,CAAC,CAAA;IACzC,IAAI,WAAW,IAAI,eAAe,CAAC,OAAO,CAAC,CAAA;IAC3C,IAAI,YAAY,IAAI,eAAe,CAAC,OAAO,CAAC,CAAA;IAC5C,IAAI,gBAAgB,IAAI,eAAe,CAAC,OAAO,CAAC,CAAA;IAChD,IAAI,iBAAiB,IAAI,eAAe,CAAC,IAAI,CAAC,CAAA;IAC9C,IAAI,wBAAwB,IAAI,sBAAsB,CAAC,OAAO,CAAC,CAAA;IAC/D,IAAI,
|
|
1
|
+
{"version":3,"file":"Engine.d.ts","sourceRoot":"","sources":["../src/Engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,kBAAkB,CAAA;AACrC,OAAO,EACH,GAAG,EACH,sBAAsB,EACtB,QAAQ,EACR,eAAe,EACf,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,IAAI,EACP,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAC,gBAAgB,EAAE,UAAU,EAAC,MAAM,0BAA0B,CAAA;AACrE,OAAO,EAAC,OAAO,EAAC,MAAM,mBAAmB,CAAA;AAEzC,MAAM,WAAW,MAAO,SAAQ,UAAU;IACtC,IAAI,IAAI,IAAI,CAAA;IACZ,IAAI,IAAI,IAAI,CAAA;IACZ,WAAW,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAA;IACjC,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;IAC7C,aAAa,IAAI,IAAI,CAAA;IACrB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACxB,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC,CAAA;IACxC,IAAI,IAAI,IAAI,CAAA;IACZ,KAAK,IAAI,IAAI,CAAA;IACb,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAAA;IACpC,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,YAAY,CAAA;IAC5D,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;IACxC,gBAAgB,CAAC,OAAO,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAA;IAC1D,gBAAgB,CAAC,QAAQ,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAA;IAC3D,yBAAyB,CAAC,QAAQ,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GAAG,YAAY,CAAA;IAE7E,IAAI,QAAQ,IAAI,eAAe,CAAC,IAAI,CAAC,CAAA;IACrC,IAAI,SAAS,IAAI,eAAe,CAAC,OAAO,CAAC,CAAA;IACzC,IAAI,WAAW,IAAI,eAAe,CAAC,OAAO,CAAC,CAAA;IAC3C,IAAI,YAAY,IAAI,eAAe,CAAC,OAAO,CAAC,CAAA;IAC5C,IAAI,gBAAgB,IAAI,eAAe,CAAC,OAAO,CAAC,CAAA;IAChD,IAAI,iBAAiB,IAAI,eAAe,CAAC,IAAI,CAAC,CAAA;IAC9C,IAAI,wBAAwB,IAAI,sBAAsB,CAAC,OAAO,CAAC,CAAA;IAC/D,IAAI,gBAAgB,IAAI,eAAe,CAAC,GAAG,CAAC,CAAA;IAC5C,IAAI,qBAAqB,IAAI,eAAe,CAAC,MAAM,CAAC,CAAA;IACpD,IAAI,WAAW,IAAI,eAAe,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAA;IAC/D,IAAI,OAAO,IAAI,OAAO,CAAA;CACzB"}
|
package/dist/EngineFacade.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { ppqn } from "@opendaw/lib-dsp";
|
|
|
3
3
|
import { ClipNotification, NoteSignal } from "@opendaw/studio-adapters";
|
|
4
4
|
import { Engine } from "./Engine";
|
|
5
5
|
import { EngineWorklet } from "./EngineWorklet";
|
|
6
|
-
import { Project } from "./project
|
|
6
|
+
import { Project } from "./project";
|
|
7
7
|
export declare class EngineFacade implements Engine {
|
|
8
8
|
#private;
|
|
9
9
|
constructor();
|
|
@@ -22,7 +22,7 @@ export declare class EngineFacade implements Engine {
|
|
|
22
22
|
get metronomeEnabled(): MutableObservableValue<boolean>;
|
|
23
23
|
get playbackTimestamp(): ObservableValue<ppqn>;
|
|
24
24
|
get playbackTimestampEnabled(): MutableObservableValue<boolean>;
|
|
25
|
-
get
|
|
25
|
+
get countInBarsTotal(): MutableObservableValue<int>;
|
|
26
26
|
get countInBeatsRemaining(): ObservableValue<int>;
|
|
27
27
|
get markerState(): DefaultObservableValue<Nullable<[UUID.Bytes, int]>>;
|
|
28
28
|
get project(): Project;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EngineFacade.d.ts","sourceRoot":"","sources":["../src/EngineFacade.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,sBAAsB,EACtB,GAAG,EACH,sBAAsB,EACtB,QAAQ,EACR,eAAe,EACf,QAAQ,EAER,YAAY,EAEZ,IAAI,EACP,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAC,IAAI,EAAC,MAAM,kBAAkB,CAAA;AACrC,OAAO,EAAC,gBAAgB,EAAE,UAAU,EAAC,MAAM,0BAA0B,CAAA;AACrE,OAAO,EAAC,MAAM,EAAC,MAAM,UAAU,CAAA;AAC/B,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAC,OAAO,EAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"EngineFacade.d.ts","sourceRoot":"","sources":["../src/EngineFacade.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,sBAAsB,EACtB,GAAG,EACH,sBAAsB,EACtB,QAAQ,EACR,eAAe,EACf,QAAQ,EAER,YAAY,EAEZ,IAAI,EACP,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAC,IAAI,EAAC,MAAM,kBAAkB,CAAA;AACrC,OAAO,EAAC,gBAAgB,EAAE,UAAU,EAAC,MAAM,0BAA0B,CAAA;AACrE,OAAO,EAAC,MAAM,EAAC,MAAM,UAAU,CAAA;AAC/B,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AAEjC,qBAAa,YAAa,YAAW,MAAM;;;IAmBvC,UAAU,CAAC,OAAO,EAAE,aAAa;IAoBjC,aAAa,IAAI,IAAI;IAErB,cAAc,IAAI,IAAI;IAMtB,IAAI,IAAI,IAAI;IACZ,IAAI,CAAC,KAAK,GAAE,OAAe,GAAG,IAAI;IAClC,WAAW,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI;IACjC,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAC7C,aAAa,IAAI,IAAI;IAErB,IAAI,QAAQ,IAAI,eAAe,CAAC,IAAI,CAAC,CAAwB;IAC7D,IAAI,SAAS,IAAI,eAAe,CAAC,OAAO,CAAC,CAAyB;IAClE,IAAI,WAAW,IAAI,eAAe,CAAC,OAAO,CAAC,CAA2B;IACtE,IAAI,YAAY,IAAI,eAAe,CAAC,OAAO,CAAC,CAA4B;IACxE,IAAI,gBAAgB,IAAI,sBAAsB,CAAC,OAAO,CAAC,CAAgC;IACvF,IAAI,iBAAiB,IAAI,eAAe,CAAC,IAAI,CAAC,CAAiC;IAC/E,IAAI,wBAAwB,IAAI,sBAAsB,CAAC,OAAO,CAAC,CAAwC;IACvG,IAAI,gBAAgB,IAAI,sBAAsB,CAAC,GAAG,CAAC,CAAgC;IACnF,IAAI,qBAAqB,IAAI,eAAe,CAAC,GAAG,CAAC,CAAqC;IACtF,IAAI,WAAW,IAAI,sBAAsB,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAA2B;IACjG,IAAI,OAAO,IAAI,OAAO,CAAmE;IAEzF,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IACxB,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC;IAGxC,KAAK,IAAI,IAAI;IACb,UAAU,IAAI,MAAM;IACpB,yBAAyB,CAAC,QAAQ,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GAAG,YAAY;IAG7E,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,YAAY;IAG5D,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI;IAGxC,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAGpC,gBAAgB,CAAC,OAAO,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI;IAG1D,gBAAgB,CAAC,QAAQ,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI;IAI3D,SAAS,IAAI,IAAI;CAIpB"}
|
package/dist/EngineFacade.js
CHANGED
|
@@ -4,7 +4,7 @@ export class EngineFacade {
|
|
|
4
4
|
#lifecycle = this.#terminator.own(new Terminator());
|
|
5
5
|
#playbackTimestamp = new DefaultObservableValue(0.0);
|
|
6
6
|
#playbackTimestampEnabled = new DefaultObservableValue(true);
|
|
7
|
-
#
|
|
7
|
+
#countInBarsTotal = new DefaultObservableValue(1);
|
|
8
8
|
#countInBeatsRemaining = new DefaultObservableValue(0);
|
|
9
9
|
#position = new DefaultObservableValue(0.0);
|
|
10
10
|
#isPlaying = new DefaultObservableValue(false);
|
|
@@ -17,7 +17,7 @@ export class EngineFacade {
|
|
|
17
17
|
setWorklet(worklet) {
|
|
18
18
|
this.#worklet = Option.wrap(worklet);
|
|
19
19
|
this.#lifecycle.terminate();
|
|
20
|
-
this.#lifecycle.ownAll(worklet.playbackTimestamp.catchupAndSubscribe(owner => this.#playbackTimestamp.setValue(owner.getValue())), worklet.playbackTimestampEnabled.catchupAndSubscribe(owner => this.#playbackTimestampEnabled.setValue(owner.getValue())), worklet.
|
|
20
|
+
this.#lifecycle.ownAll(worklet.playbackTimestamp.catchupAndSubscribe(owner => this.#playbackTimestamp.setValue(owner.getValue())), worklet.playbackTimestampEnabled.catchupAndSubscribe(owner => this.#playbackTimestampEnabled.setValue(owner.getValue())), worklet.countInBarsTotal.catchupAndSubscribe(owner => this.#countInBarsTotal.setValue(owner.getValue())), worklet.countInBeatsRemaining.catchupAndSubscribe(owner => this.#countInBeatsRemaining.setValue(owner.getValue())), worklet.position.catchupAndSubscribe(owner => this.#position.setValue(owner.getValue())), worklet.isPlaying.catchupAndSubscribe(owner => this.#isPlaying.setValue(owner.getValue())), worklet.isRecording.catchupAndSubscribe(owner => this.#isRecording.setValue(owner.getValue())), worklet.isCountingIn.catchupAndSubscribe(owner => this.#isCountingIn.setValue(owner.getValue())), worklet.metronomeEnabled.catchupAndSubscribe(owner => this.#metronomeEnabled.setValue(owner.getValue())), worklet.markerState.catchupAndSubscribe(owner => this.#markerState.setValue(owner.getValue())), this.#metronomeEnabled.catchupAndSubscribe(owner => worklet.metronomeEnabled.setValue(owner.getValue())), this.#playbackTimestampEnabled.catchupAndSubscribe(owner => worklet.playbackTimestampEnabled.setValue(owner.getValue())), this.#countInBarsTotal.catchupAndSubscribe(owner => worklet.countInBarsTotal.setValue(owner.getValue())));
|
|
21
21
|
}
|
|
22
22
|
assertWorklet() { this.#worklet.unwrap("No worklet available"); }
|
|
23
23
|
releaseWorklet() {
|
|
@@ -37,7 +37,7 @@ export class EngineFacade {
|
|
|
37
37
|
get metronomeEnabled() { return this.#metronomeEnabled; }
|
|
38
38
|
get playbackTimestamp() { return this.#playbackTimestamp; }
|
|
39
39
|
get playbackTimestampEnabled() { return this.#playbackTimestampEnabled; }
|
|
40
|
-
get
|
|
40
|
+
get countInBarsTotal() { return this.#countInBarsTotal; }
|
|
41
41
|
get countInBeatsRemaining() { return this.#countInBeatsRemaining; }
|
|
42
42
|
get markerState() { return this.#markerState; }
|
|
43
43
|
get project() { return this.#worklet.unwrap("No worklet to get project").project; }
|
package/dist/EngineWorklet.d.ts
CHANGED
|
@@ -17,7 +17,7 @@ export declare class EngineWorklet extends AudioWorkletNode implements Engine {
|
|
|
17
17
|
get isPlaying(): ObservableValue<boolean>;
|
|
18
18
|
get isRecording(): ObservableValue<boolean>;
|
|
19
19
|
get isCountingIn(): ObservableValue<boolean>;
|
|
20
|
-
get
|
|
20
|
+
get countInBarsTotal(): MutableObservableValue<int>;
|
|
21
21
|
get countInBeatsRemaining(): ObservableValue<number>;
|
|
22
22
|
get position(): ObservableValue<ppqn>;
|
|
23
23
|
get playbackTimestamp(): MutableObservableValue<number>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EngineWorklet.d.ts","sourceRoot":"","sources":["../src/EngineWorklet.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,GAAG,EACH,sBAAsB,EAEtB,QAAQ,EACR,eAAe,EACf,QAAQ,EAER,YAAY,EAGZ,IAAI,EACP,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAC,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAIrC,OAAO,EAEH,gBAAgB,EAOhB,wBAAwB,EACxB,UAAU,EACV,gBAAgB,EACnB,MAAM,0BAA0B,CAAA;AAEjC,OAAO,EAAC,MAAM,EAAC,MAAM,UAAU,CAAA;AAC/B,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AAGjC,qBAAa,aAAc,SAAQ,gBAAiB,YAAW,MAAM;;IACjE,MAAM,CAAC,EAAE,EAAE,GAAG,CAAQ;IAEtB,QAAQ,CAAC,EAAE,SAAqB;gBAqBpB,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,OAAO,EAChB,mBAAmB,CAAC,EAAE,wBAAwB,EAC9C,OAAO,CAAC,EAAE,gBAAgB;
|
|
1
|
+
{"version":3,"file":"EngineWorklet.d.ts","sourceRoot":"","sources":["../src/EngineWorklet.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,GAAG,EACH,sBAAsB,EAEtB,QAAQ,EACR,eAAe,EACf,QAAQ,EAER,YAAY,EAGZ,IAAI,EACP,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAC,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAIrC,OAAO,EAEH,gBAAgB,EAOhB,wBAAwB,EACxB,UAAU,EACV,gBAAgB,EACnB,MAAM,0BAA0B,CAAA;AAEjC,OAAO,EAAC,MAAM,EAAC,MAAM,UAAU,CAAA;AAC/B,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AAGjC,qBAAa,aAAc,SAAQ,gBAAiB,YAAW,MAAM;;IACjE,MAAM,CAAC,EAAE,EAAE,GAAG,CAAQ;IAEtB,QAAQ,CAAC,EAAE,SAAqB;gBAqBpB,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,OAAO,EAChB,mBAAmB,CAAC,EAAE,wBAAwB,EAC9C,OAAO,CAAC,EAAE,gBAAgB;IAoItC,IAAI,IAAI,IAAI;IACZ,IAAI,CAAC,KAAK,GAAE,OAAe,GAAG,IAAI;IAClC,WAAW,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI;IACjC,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAC7C,aAAa,IAAI,IAAI;IACrB,KAAK,IAAI,IAAI;IAEb,IAAI,SAAS,IAAI,eAAe,CAAC,OAAO,CAAC,CAAyB;IAClE,IAAI,WAAW,IAAI,eAAe,CAAC,OAAO,CAAC,CAA2B;IACtE,IAAI,YAAY,IAAI,eAAe,CAAC,OAAO,CAAC,CAA4B;IACxE,IAAI,gBAAgB,IAAI,sBAAsB,CAAC,GAAG,CAAC,CAAgC;IACnF,IAAI,qBAAqB,IAAI,eAAe,CAAC,MAAM,CAAC,CAAqC;IACzF,IAAI,QAAQ,IAAI,eAAe,CAAC,IAAI,CAAC,CAAwB;IAC7D,IAAI,iBAAiB,IAAI,sBAAsB,CAAC,MAAM,CAAC,CAAiC;IACxF,IAAI,wBAAwB,IAAI,sBAAsB,CAAC,OAAO,CAAC,CAAwC;IACvG,IAAI,gBAAgB,IAAI,sBAAsB,CAAC,OAAO,CAAC,CAAgC;IACvF,IAAI,WAAW,IAAI,eAAe,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAA2B;IAC1F,IAAI,OAAO,IAAI,OAAO,CAAuB;IAE7C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IACxB,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC;IACxC,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IACpC,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,YAAY;IAC5D,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI;IACxC,gBAAgB,CAAC,OAAO,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI;IAI1D,gBAAgB,CAAC,QAAQ,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI;IAG3D,yBAAyB,CAAC,QAAQ,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GAAG,YAAY;IAQ7E,SAAS,IAAI,IAAI;CAIpB"}
|
package/dist/EngineWorklet.js
CHANGED
|
@@ -14,7 +14,7 @@ export class EngineWorklet extends AudioWorkletNode {
|
|
|
14
14
|
#isPlaying = new DefaultObservableValue(false);
|
|
15
15
|
#isRecording = new DefaultObservableValue(false);
|
|
16
16
|
#isCountingIn = new DefaultObservableValue(false);
|
|
17
|
-
#
|
|
17
|
+
#countInBarsTotal = new DefaultObservableValue(1);
|
|
18
18
|
#countInBeatsRemaining = new DefaultObservableValue(0);
|
|
19
19
|
#metronomeEnabled = new DefaultObservableValue(false);
|
|
20
20
|
#markerState = new DefaultObservableValue(null);
|
|
@@ -29,7 +29,6 @@ export class EngineWorklet extends AudioWorkletNode {
|
|
|
29
29
|
this.#isPlaying.setValue(state.isPlaying);
|
|
30
30
|
this.#isRecording.setValue(state.isRecording);
|
|
31
31
|
this.#isCountingIn.setValue(state.isCountingIn);
|
|
32
|
-
this.#countInBeatsTotal.setValue(state.countInBeatsTotal);
|
|
33
32
|
this.#countInBeatsRemaining.setValue(state.countInBeatsRemaining);
|
|
34
33
|
this.#playbackTimestamp.setValue(state.playbackTimestamp);
|
|
35
34
|
this.#position.setValue(state.position); // This must be the last to handle the state values before
|
|
@@ -56,7 +55,9 @@ export class EngineWorklet extends AudioWorkletNode {
|
|
|
56
55
|
play() { dispatcher.dispatchAndForget(this.play); }
|
|
57
56
|
stop(reset) { dispatcher.dispatchAndForget(this.stop, reset); }
|
|
58
57
|
setPosition(position) { dispatcher.dispatchAndForget(this.setPosition, position); }
|
|
59
|
-
prepareRecordingState(countIn) {
|
|
58
|
+
prepareRecordingState(countIn) {
|
|
59
|
+
dispatcher.dispatchAndForget(this.prepareRecordingState, countIn);
|
|
60
|
+
}
|
|
60
61
|
stopRecording() { dispatcher.dispatchAndForget(this.stopRecording); }
|
|
61
62
|
setMetronomeEnabled(enabled) {
|
|
62
63
|
dispatcher.dispatchAndForget(this.setMetronomeEnabled, enabled);
|
|
@@ -64,6 +65,9 @@ export class EngineWorklet extends AudioWorkletNode {
|
|
|
64
65
|
setPlaybackTimestampEnabled(enabled) {
|
|
65
66
|
dispatcher.dispatchAndForget(this.setPlaybackTimestampEnabled, enabled);
|
|
66
67
|
}
|
|
68
|
+
setCountInBarsTotal(value) {
|
|
69
|
+
dispatcher.dispatchAndForget(this.setCountInBarsTotal, value);
|
|
70
|
+
}
|
|
67
71
|
queryLoadingComplete() {
|
|
68
72
|
return dispatcher.dispatchAndReturn(this.queryLoadingComplete);
|
|
69
73
|
}
|
|
@@ -126,9 +130,16 @@ export class EngineWorklet extends AudioWorkletNode {
|
|
|
126
130
|
changes.started.forEach(uuid => this.#playingClips.push(uuid));
|
|
127
131
|
this.#notifyClipNotification.notify({ type: "sequencing", changes });
|
|
128
132
|
},
|
|
129
|
-
switchMarkerState: (state) => this.#markerState.setValue(state)
|
|
133
|
+
switchMarkerState: (state) => this.#markerState.setValue(state),
|
|
134
|
+
sendMIDIData: (target, data, relativeTimeInMs) => {
|
|
135
|
+
let delay = 20.0; // default 20ms
|
|
136
|
+
if (this.context instanceof AudioContext) {
|
|
137
|
+
delay = this.context.outputLatency / 1000.0;
|
|
138
|
+
}
|
|
139
|
+
this.#project.receivedMIDIFromEngine(target, data, relativeTimeInMs + delay);
|
|
140
|
+
}
|
|
130
141
|
});
|
|
131
|
-
this.#terminator.ownAll(AnimationFrame.add(() => reader.tryRead()), project.liveStreamReceiver.connect(messenger.channel("engine-live-data")), new SyncSource(project.boxGraph, messenger.channel("engine-sync"), false), this.#metronomeEnabled.catchupAndSubscribe(owner => this.#commands.setMetronomeEnabled(owner.getValue())), this.#playbackTimestampEnabled.catchupAndSubscribe(owner => this.#commands.setPlaybackTimestampEnabled(owner.getValue())));
|
|
142
|
+
this.#terminator.ownAll(AnimationFrame.add(() => reader.tryRead()), project.liveStreamReceiver.connect(messenger.channel("engine-live-data")), new SyncSource(project.boxGraph, messenger.channel("engine-sync"), false), this.#metronomeEnabled.catchupAndSubscribe(owner => this.#commands.setMetronomeEnabled(owner.getValue())), this.#playbackTimestampEnabled.catchupAndSubscribe(owner => this.#commands.setPlaybackTimestampEnabled(owner.getValue())), this.#countInBarsTotal.catchupAndSubscribe(owner => this.#commands.setCountInBarsTotal(owner.getValue())));
|
|
132
143
|
}
|
|
133
144
|
play() { this.#commands.play(); }
|
|
134
145
|
stop(reset = false) { this.#commands.stop(reset); }
|
|
@@ -139,7 +150,7 @@ export class EngineWorklet extends AudioWorkletNode {
|
|
|
139
150
|
get isPlaying() { return this.#isPlaying; }
|
|
140
151
|
get isRecording() { return this.#isRecording; }
|
|
141
152
|
get isCountingIn() { return this.#isCountingIn; }
|
|
142
|
-
get
|
|
153
|
+
get countInBarsTotal() { return this.#countInBarsTotal; }
|
|
143
154
|
get countInBeatsRemaining() { return this.#countInBeatsRemaining; }
|
|
144
155
|
get position() { return this.#position; }
|
|
145
156
|
get playbackTimestamp() { return this.#playbackTimestamp; }
|
package/dist/InstrumentBox.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { NanoDeviceBox, PlayfieldDeviceBox, SoundfontDeviceBox, TapeDeviceBox, VaporisateurDeviceBox } from "@opendaw/studio-boxes";
|
|
2
|
-
export type InstrumentBox = TapeDeviceBox | VaporisateurDeviceBox | NanoDeviceBox | PlayfieldDeviceBox | SoundfontDeviceBox;
|
|
1
|
+
import { MIDIOutputDeviceBox, NanoDeviceBox, PlayfieldDeviceBox, SoundfontDeviceBox, TapeDeviceBox, VaporisateurDeviceBox } from "@opendaw/studio-boxes";
|
|
2
|
+
export type InstrumentBox = TapeDeviceBox | VaporisateurDeviceBox | NanoDeviceBox | PlayfieldDeviceBox | SoundfontDeviceBox | MIDIOutputDeviceBox;
|
|
3
3
|
//# sourceMappingURL=InstrumentBox.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InstrumentBox.d.ts","sourceRoot":"","sources":["../src/InstrumentBox.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,EACb,qBAAqB,EACxB,MAAM,uBAAuB,CAAA;AAE9B,MAAM,MAAM,aAAa,GACrB,aAAa,GACX,qBAAqB,GACrB,aAAa,GACb,kBAAkB,GAClB,kBAAkB,CAAA"}
|
|
1
|
+
{"version":3,"file":"InstrumentBox.d.ts","sourceRoot":"","sources":["../src/InstrumentBox.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,mBAAmB,EACnB,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,EACb,qBAAqB,EACxB,MAAM,uBAAuB,CAAA;AAE9B,MAAM,MAAM,aAAa,GACrB,aAAa,GACX,qBAAqB,GACrB,aAAa,GACb,kBAAkB,GAClB,kBAAkB,GAClB,mBAAmB,CAAA"}
|
|
@@ -5,6 +5,7 @@ export declare namespace InstrumentFactories {
|
|
|
5
5
|
const Nano: InstrumentFactory;
|
|
6
6
|
const Playfield: InstrumentFactory;
|
|
7
7
|
const Vaporisateur: InstrumentFactory;
|
|
8
|
+
const MIDIOutput: InstrumentFactory;
|
|
8
9
|
const Soundfont: InstrumentFactory<{
|
|
9
10
|
uuid: UUID.String;
|
|
10
11
|
name: string;
|
|
@@ -18,6 +19,7 @@ export declare namespace InstrumentFactories {
|
|
|
18
19
|
uuid: UUID.String;
|
|
19
20
|
name: string;
|
|
20
21
|
}>;
|
|
22
|
+
MIDIOutput: InstrumentFactory<never>;
|
|
21
23
|
};
|
|
22
24
|
type Keys = keyof typeof Named;
|
|
23
25
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InstrumentFactories.d.ts","sourceRoot":"","sources":["../src/InstrumentFactories.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"InstrumentFactories.d.ts","sourceRoot":"","sources":["../src/InstrumentFactories.ts"],"names":[],"mappings":"AAYA,OAAO,EAAC,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAKrC,OAAO,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAA;AAGrD,yBAAiB,mBAAmB,CAAC;IAC1B,MAAM,IAAI,EAAE,iBAmBlB,CAAA;IAEM,MAAM,IAAI,EAAE,iBAwBlB,CAAA;IAEM,MAAM,SAAS,EAAE,iBAsCvB,CAAA;IAEM,MAAM,YAAY,EAAE,iBAqB1B,CAAA;IAEM,MAAM,UAAU,EAAE,iBAexB,CAAA;IAEM,MAAM,SAAS,EAAE,iBAAiB,CAAC;QAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAqB5E,CAAA;IAEM,MAAM,KAAK;;;;;;kBAvBgC,IAAI,CAAC,MAAM;kBAAQ,MAAM;;;KAuBM,CAAA;IACjF,KAAY,IAAI,GAAG,MAAM,OAAO,KAAK,CAAA;CAYxC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AudioFileBox, NanoDeviceBox, PlayfieldDeviceBox, PlayfieldSampleBox, SoundfontDeviceBox, SoundfontFileBox, TapeDeviceBox, VaporisateurDeviceBox } from "@opendaw/studio-boxes";
|
|
1
|
+
import { AudioFileBox, MIDIOutputDeviceBox, NanoDeviceBox, PlayfieldDeviceBox, PlayfieldSampleBox, SoundfontDeviceBox, SoundfontFileBox, TapeDeviceBox, VaporisateurDeviceBox } from "@opendaw/studio-boxes";
|
|
2
2
|
import { UUID } from "@opendaw/lib-std";
|
|
3
3
|
import { Waveform } from "@opendaw/lib-dsp";
|
|
4
4
|
import { IconSymbol, TrackType } from "@opendaw/studio-adapters";
|
|
@@ -91,6 +91,17 @@ export var InstrumentFactories;
|
|
|
91
91
|
box.host.refer(host);
|
|
92
92
|
})
|
|
93
93
|
};
|
|
94
|
+
InstrumentFactories.MIDIOutput = {
|
|
95
|
+
defaultName: "MIDIOutput",
|
|
96
|
+
defaultIcon: IconSymbol.Midi,
|
|
97
|
+
description: "MIDI Output",
|
|
98
|
+
trackType: TrackType.Notes,
|
|
99
|
+
create: (boxGraph, host, name, icon, _attachment) => MIDIOutputDeviceBox.create(boxGraph, UUID.generate(), box => {
|
|
100
|
+
box.label.setValue(name);
|
|
101
|
+
box.icon.setValue(IconSymbol.toName(icon));
|
|
102
|
+
box.host.refer(host);
|
|
103
|
+
})
|
|
104
|
+
};
|
|
94
105
|
InstrumentFactories.Soundfont = {
|
|
95
106
|
defaultName: "Soundfont",
|
|
96
107
|
defaultIcon: IconSymbol.Book,
|
|
@@ -109,7 +120,7 @@ export var InstrumentFactories;
|
|
|
109
120
|
});
|
|
110
121
|
}
|
|
111
122
|
};
|
|
112
|
-
InstrumentFactories.Named = { Vaporisateur: InstrumentFactories.Vaporisateur, Playfield: InstrumentFactories.Playfield, Nano: InstrumentFactories.Nano, Tape: InstrumentFactories.Tape, Soundfont: InstrumentFactories.Soundfont };
|
|
123
|
+
InstrumentFactories.Named = { Vaporisateur: InstrumentFactories.Vaporisateur, Playfield: InstrumentFactories.Playfield, Nano: InstrumentFactories.Nano, Tape: InstrumentFactories.Tape, Soundfont: InstrumentFactories.Soundfont, MIDIOutput: InstrumentFactories.MIDIOutput };
|
|
113
124
|
const useAudioFile = (boxGraph, fileUUID, name, duration) => boxGraph.findBox(fileUUID)
|
|
114
125
|
.unwrapOrElse(() => AudioFileBox.create(boxGraph, fileUUID, box => {
|
|
115
126
|
box.fileName.setValue(name);
|