@opendaw/studio-core 0.0.85 → 0.0.87
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/AudioOfflineRenderer.d.ts.map +1 -1
- package/dist/AudioOfflineRenderer.js +1 -0
- package/dist/AudioWorklets.d.ts +3 -2
- package/dist/AudioWorklets.d.ts.map +1 -1
- package/dist/AudioWorklets.js +5 -2
- package/dist/EffectBox.d.ts +2 -2
- package/dist/EffectBox.d.ts.map +1 -1
- package/dist/EffectFactories.d.ts +3 -0
- package/dist/EffectFactories.d.ts.map +1 -1
- package/dist/EffectFactories.js +30 -3
- package/dist/EffectFactory.d.ts +2 -7
- package/dist/EffectFactory.d.ts.map +1 -1
- package/dist/Engine.d.ts +3 -5
- package/dist/Engine.d.ts.map +1 -1
- package/dist/EngineFacade.d.ts +3 -5
- package/dist/EngineFacade.d.ts.map +1 -1
- package/dist/EngineFacade.js +10 -9
- package/dist/EngineWorklet.d.ts +2 -4
- package/dist/EngineWorklet.d.ts.map +1 -1
- package/dist/EngineWorklet.js +6 -18
- package/dist/OfflineEngineRenderer.d.ts +10 -0
- package/dist/OfflineEngineRenderer.d.ts.map +1 -0
- package/dist/OfflineEngineRenderer.js +141 -0
- package/dist/RecordingWorklet.d.ts +1 -1
- package/dist/RecordingWorklet.d.ts.map +1 -1
- package/dist/RecordingWorklet.js +10 -17
- package/dist/StudioPreferences.d.ts +21 -0
- package/dist/StudioPreferences.d.ts.map +1 -0
- package/dist/StudioPreferences.js +3 -0
- package/dist/StudioSettings.d.ts +24 -0
- package/dist/StudioSettings.d.ts.map +1 -0
- package/dist/StudioSettings.js +22 -0
- package/dist/WavFile.js +4 -3
- package/dist/capture/CaptureAudio.d.ts.map +1 -1
- package/dist/capture/CaptureAudio.js +8 -7
- package/dist/capture/RecordAudio.d.ts +2 -1
- package/dist/capture/RecordAudio.d.ts.map +1 -1
- package/dist/capture/RecordAudio.js +78 -37
- package/dist/capture/RecordTrack.d.ts +1 -1
- package/dist/capture/RecordTrack.d.ts.map +1 -1
- package/dist/capture/RecordTrack.js +7 -5
- package/dist/dawproject/DawProjectExporter.test.js +1 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/offline-engine.js +2 -0
- package/dist/offline-engine.js.map +7 -0
- package/dist/processors.js +35 -18
- package/dist/processors.js.map +4 -4
- package/dist/project/Project.d.ts.map +1 -1
- package/dist/project/Project.js +39 -18
- package/dist/project/ProjectMigration.d.ts.map +1 -1
- package/dist/project/ProjectMigration.js +41 -1
- package/dist/project/index.d.ts +1 -0
- package/dist/project/index.d.ts.map +1 -1
- package/dist/project/index.js +1 -0
- package/dist/samples/DefaultSampleLoader.d.ts +5 -3
- package/dist/samples/DefaultSampleLoader.d.ts.map +1 -1
- package/dist/samples/DefaultSampleLoader.js +21 -82
- package/dist/samples/{DefaultSampleLoaderManager.d.ts → GlobalSampleLoaderManager.d.ts} +4 -3
- package/dist/samples/GlobalSampleLoaderManager.d.ts.map +1 -0
- package/dist/samples/GlobalSampleLoaderManager.js +146 -0
- package/dist/samples/OpenSampleAPI.d.ts +1 -2
- package/dist/samples/OpenSampleAPI.d.ts.map +1 -1
- package/dist/samples/OpenSampleAPI.js +22 -26
- package/dist/samples/SampleAPI.d.ts +1 -1
- package/dist/samples/SampleAPI.d.ts.map +1 -1
- package/dist/samples/SampleService.d.ts.map +1 -1
- package/dist/samples/SampleService.js +5 -7
- package/dist/samples/SampleStorage.d.ts +0 -1
- package/dist/samples/SampleStorage.d.ts.map +1 -1
- package/dist/samples/SampleStorage.js +0 -1
- package/dist/samples/index.d.ts +1 -1
- package/dist/samples/index.d.ts.map +1 -1
- package/dist/samples/index.js +1 -1
- package/dist/workers-main.js +1 -1
- package/dist/workers-main.js.map +3 -3
- package/package.json +18 -16
- package/dist/Preferences.d.ts +0 -32
- package/dist/Preferences.d.ts.map +0 -1
- package/dist/Preferences.js +0 -52
- package/dist/samples/DefaultSampleLoaderManager.d.ts.map +0 -1
- package/dist/samples/DefaultSampleLoaderManager.js +0 -35
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AudioOfflineRenderer.d.ts","sourceRoot":"","sources":["../src/AudioOfflineRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,GAAG,EAAa,MAAM,EAAS,QAAQ,EAAuB,MAAM,kBAAkB,CAAA;AAGtG,OAAO,EAAC,wBAAwB,EAAC,MAAM,0BAA0B,CAAA;AACjE,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AAGjC,yBAAiB,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"AudioOfflineRenderer.d.ts","sourceRoot":"","sources":["../src/AudioOfflineRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,GAAG,EAAa,MAAM,EAAS,QAAQ,EAAuB,MAAM,kBAAkB,CAAA;AAGtG,OAAO,EAAC,wBAAwB,EAAC,MAAM,0BAA0B,CAAA;AACjE,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AAGjC,yBAAiB,oBAAoB,CAAC;IAE3B,MAAM,KAAK,GAAU,QAAQ,OAAO,EACf,wBAAwB,MAAM,CAAC,wBAAwB,CAAC,EACxD,UAAU,QAAQ,CAAC,OAAO,EAC1B,cAAc,WAAW,EACzB,aAAY,GAAY,KAAG,OAAO,CAAC,WAAW,CA+CzE,CAAA;CACJ"}
|
|
@@ -5,6 +5,7 @@ import { ExportStemsConfiguration } from "@opendaw/studio-adapters";
|
|
|
5
5
|
import { AudioWorklets } from "./AudioWorklets";
|
|
6
6
|
export var AudioOfflineRenderer;
|
|
7
7
|
(function (AudioOfflineRenderer) {
|
|
8
|
+
/* Deprecated */
|
|
8
9
|
AudioOfflineRenderer.start = async (source, optExportConfiguration, progress, abortSignal, sampleRate = 48_000) => {
|
|
9
10
|
const numStems = ExportStemsConfiguration.countStems(optExportConfiguration);
|
|
10
11
|
if (numStems === 0) {
|
package/dist/AudioWorklets.d.ts
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { int } from "@opendaw/lib-std";
|
|
2
2
|
import { ExportStemsConfiguration, ProcessorOptions } from "@opendaw/studio-adapters";
|
|
3
|
-
import { Project } from "./project
|
|
3
|
+
import { Project } from "./project";
|
|
4
4
|
import { EngineWorklet } from "./EngineWorklet";
|
|
5
5
|
import { MeterWorklet } from "./MeterWorklet";
|
|
6
6
|
import { RecordingWorklet } from "./RecordingWorklet";
|
|
7
7
|
export declare class AudioWorklets {
|
|
8
8
|
#private;
|
|
9
9
|
static install(url: string): void;
|
|
10
|
+
static get processorsUrl(): string;
|
|
10
11
|
static createFor(context: BaseAudioContext): Promise<AudioWorklets>;
|
|
11
12
|
static get(context: BaseAudioContext): AudioWorklets;
|
|
12
13
|
constructor(context: BaseAudioContext);
|
|
@@ -17,6 +18,6 @@ export declare class AudioWorklets {
|
|
|
17
18
|
exportConfiguration?: ExportStemsConfiguration;
|
|
18
19
|
options?: ProcessorOptions;
|
|
19
20
|
}): EngineWorklet;
|
|
20
|
-
createRecording(numberOfChannels: int, numChunks: int
|
|
21
|
+
createRecording(numberOfChannels: int, numChunks: int): RecordingWorklet;
|
|
21
22
|
}
|
|
22
23
|
//# sourceMappingURL=AudioWorklets.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AudioWorklets.d.ts","sourceRoot":"","sources":["../src/AudioWorklets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,GAAG,EAAS,MAAM,kBAAkB,CAAA;AACvD,OAAO,EAAC,wBAAwB,EAAE,gBAAgB,EAAa,MAAM,0BAA0B,CAAA;AAC/F,OAAO,EAAC,OAAO,EAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"AudioWorklets.d.ts","sourceRoot":"","sources":["../src/AudioWorklets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,GAAG,EAAS,MAAM,kBAAkB,CAAA;AACvD,OAAO,EAAC,wBAAwB,EAAE,gBAAgB,EAAa,MAAM,0BAA0B,CAAA;AAC/F,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AACjC,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAC,gBAAgB,EAAC,MAAM,oBAAoB,CAAA;AAGnD,qBAAa,aAAa;;IACtB,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAKjC,MAAM,KAAK,aAAa,IAAI,MAAM,CAEjC;WAIY,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,aAAa,CAAC;IAQzE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,gBAAgB,GAAG,aAAa;gBAMxC,OAAO,EAAE,gBAAgB;IAErC,IAAI,OAAO,IAAI,gBAAgB,CAAuB;IAEtD,WAAW,CAAC,gBAAgB,EAAE,GAAG,GAAG,YAAY;IAIhD,YAAY,CAAC,EAAC,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAC,EAAE;QAClD,OAAO,EAAE,OAAO,CAAC;QACjB,mBAAmB,CAAC,EAAE,wBAAwB,CAAC;QAC/C,OAAO,CAAC,EAAE,gBAAgB,CAAA;KAC7B,GAAG,aAAa;IAIjB,eAAe,CAAC,gBAAgB,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,GAAG,gBAAgB;CAO3E"}
|
package/dist/AudioWorklets.js
CHANGED
|
@@ -8,6 +8,9 @@ export class AudioWorklets {
|
|
|
8
8
|
console.debug(`WorkletUrl: '${url}'`);
|
|
9
9
|
this.#workletUrl = Option.wrap(url);
|
|
10
10
|
}
|
|
11
|
+
static get processorsUrl() {
|
|
12
|
+
return this.#workletUrl.unwrap("WorkletUrl is missing (call 'install' first)");
|
|
13
|
+
}
|
|
11
14
|
static #workletUrl = Option.None;
|
|
12
15
|
static async createFor(context) {
|
|
13
16
|
return context.audioWorklet.addModule(this.#workletUrl.unwrap("WorkletUrl is missing (call 'install' first)")).then(() => {
|
|
@@ -27,11 +30,11 @@ export class AudioWorklets {
|
|
|
27
30
|
createEngine({ project, exportConfiguration, options }) {
|
|
28
31
|
return new EngineWorklet(this.#context, project, exportConfiguration, options);
|
|
29
32
|
}
|
|
30
|
-
createRecording(numberOfChannels, numChunks
|
|
33
|
+
createRecording(numberOfChannels, numChunks) {
|
|
31
34
|
const audioBytes = numberOfChannels * numChunks * RenderQuantum * Float32Array.BYTES_PER_ELEMENT;
|
|
32
35
|
const pointerBytes = Int32Array.BYTES_PER_ELEMENT * 2;
|
|
33
36
|
const sab = new SharedArrayBuffer(audioBytes + pointerBytes);
|
|
34
37
|
const buffer = { sab, numChunks, numberOfChannels, bufferSize: RenderQuantum };
|
|
35
|
-
return new RecordingWorklet(this.#context, buffer
|
|
38
|
+
return new RecordingWorklet(this.#context, buffer);
|
|
36
39
|
}
|
|
37
40
|
}
|
package/dist/EffectBox.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { ArpeggioDeviceBox, CompressorDeviceBox, CrusherDeviceBox, DattorroReverbDeviceBox, DelayDeviceBox, FoldDeviceBox, ModularDeviceBox, PitchDeviceBox, RevampDeviceBox, ReverbDeviceBox, StereoToolDeviceBox, TidalDeviceBox, UnknownAudioEffectDeviceBox, UnknownMidiEffectDeviceBox, VelocityDeviceBox, ZeitgeistDeviceBox } from "@opendaw/studio-boxes";
|
|
2
|
-
export type EffectBox = ArpeggioDeviceBox | PitchDeviceBox | VelocityDeviceBox | ZeitgeistDeviceBox | UnknownMidiEffectDeviceBox | DelayDeviceBox | ReverbDeviceBox | RevampDeviceBox | StereoToolDeviceBox | TidalDeviceBox | ModularDeviceBox | UnknownAudioEffectDeviceBox | CompressorDeviceBox | CrusherDeviceBox | FoldDeviceBox | DattorroReverbDeviceBox;
|
|
1
|
+
import { ArpeggioDeviceBox, MaximizerDeviceBox, CompressorDeviceBox, CrusherDeviceBox, DattorroReverbDeviceBox, DelayDeviceBox, FoldDeviceBox, ModularDeviceBox, PitchDeviceBox, RevampDeviceBox, ReverbDeviceBox, StereoToolDeviceBox, TidalDeviceBox, UnknownAudioEffectDeviceBox, UnknownMidiEffectDeviceBox, VelocityDeviceBox, ZeitgeistDeviceBox } from "@opendaw/studio-boxes";
|
|
2
|
+
export type EffectBox = ArpeggioDeviceBox | PitchDeviceBox | VelocityDeviceBox | ZeitgeistDeviceBox | UnknownMidiEffectDeviceBox | MaximizerDeviceBox | DelayDeviceBox | ReverbDeviceBox | RevampDeviceBox | StereoToolDeviceBox | TidalDeviceBox | ModularDeviceBox | UnknownAudioEffectDeviceBox | CompressorDeviceBox | CrusherDeviceBox | FoldDeviceBox | DattorroReverbDeviceBox;
|
|
3
3
|
//# sourceMappingURL=EffectBox.d.ts.map
|
package/dist/EffectBox.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EffectBox.d.ts","sourceRoot":"","sources":["../src/EffectBox.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,uBAAuB,EACvB,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,2BAA2B,EAC3B,0BAA0B,EAC1B,iBAAiB,EACjB,kBAAkB,EACrB,MAAM,uBAAuB,CAAA;AAE9B,MAAM,MAAM,SAAS,GACf,iBAAiB,GAAG,cAAc,GAAG,iBAAiB,GAAG,kBAAkB,GAAG,0BAA0B,GACxG,cAAc,GAAG,eAAe,GAAG,eAAe,GAAG,mBAAmB,GAAG,cAAc,
|
|
1
|
+
{"version":3,"file":"EffectBox.d.ts","sourceRoot":"","sources":["../src/EffectBox.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,uBAAuB,EACvB,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,2BAA2B,EAC3B,0BAA0B,EAC1B,iBAAiB,EACjB,kBAAkB,EACrB,MAAM,uBAAuB,CAAA;AAE9B,MAAM,MAAM,SAAS,GACf,iBAAiB,GAAG,cAAc,GAAG,iBAAiB,GAAG,kBAAkB,GAAG,0BAA0B,GACxG,kBAAkB,GAAG,cAAc,GAAG,eAAe,GAAG,eAAe,GAAG,mBAAmB,GAAG,cAAc,GAC9G,gBAAgB,GAAG,2BAA2B,GAAG,mBAAmB,GAAG,gBAAgB,GAAG,aAAa,GACvG,uBAAuB,CAAA"}
|
|
@@ -7,6 +7,7 @@ export declare namespace EffectFactories {
|
|
|
7
7
|
const StereoTool: EffectFactory;
|
|
8
8
|
const Delay: EffectFactory;
|
|
9
9
|
const DattorroReverb: EffectFactory;
|
|
10
|
+
const Maximizer: EffectFactory;
|
|
10
11
|
const Compressor: EffectFactory;
|
|
11
12
|
const Reverb: EffectFactory;
|
|
12
13
|
const Crusher: EffectFactory;
|
|
@@ -30,6 +31,7 @@ export declare namespace EffectFactories {
|
|
|
30
31
|
Crusher: EffectFactory;
|
|
31
32
|
Fold: EffectFactory;
|
|
32
33
|
Tidal: EffectFactory;
|
|
34
|
+
Maximizer: EffectFactory;
|
|
33
35
|
};
|
|
34
36
|
const MidiList: ReadonlyArray<Readonly<EffectFactory>>;
|
|
35
37
|
const AudioList: ReadonlyArray<Readonly<EffectFactory>>;
|
|
@@ -43,6 +45,7 @@ export declare namespace EffectFactories {
|
|
|
43
45
|
Crusher: EffectFactory;
|
|
44
46
|
Fold: EffectFactory;
|
|
45
47
|
Tidal: EffectFactory;
|
|
48
|
+
Maximizer: EffectFactory;
|
|
46
49
|
Arpeggio: EffectFactory;
|
|
47
50
|
Pitch: EffectFactory;
|
|
48
51
|
Velocity: EffectFactory;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EffectFactories.d.ts","sourceRoot":"","sources":["../src/EffectFactories.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"EffectFactories.d.ts","sourceRoot":"","sources":["../src/EffectFactories.ts"],"names":[],"mappings":"AAyBA,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAA;AAG7C,yBAAiB,eAAe,CAAC;IACtB,MAAM,QAAQ,EAAE,aAYtB,CAAA;IAEM,MAAM,KAAK,EAAE,aAYnB,CAAA;IAEM,MAAM,QAAQ,EAAE,aAYtB,CAAA;IAEM,MAAM,SAAS,EAAE,aAsBvB,CAAA;IAEM,MAAM,UAAU,EAAE,aAaxB,CAAA;IAEM,MAAM,KAAK,EAAE,aAanB,CAAA;IAEM,MAAM,cAAc,EAAE,aAa5B,CAAA;IAEM,MAAM,SAAS,EAAE,aAavB,CAAA;IAEM,MAAM,UAAU,EAAE,aAaxB,CAAA;IAEM,MAAM,MAAM,EAAE,aAcpB,CAAA;IAEM,MAAM,OAAO,EAAE,aAarB,CAAA;IAEM,MAAM,IAAI,EAAE,aAalB,CAAA;IAEM,MAAM,KAAK,EAAE,aAcnB,CAAA;IAEM,MAAM,MAAM,EAAE,aAapB,CAAA;IAEM,MAAM,OAAO,EAAE,aAqCrB,CAAA;IAEM,MAAM,SAAS;;;;;KAAyC,CAAA;IACxD,MAAM,UAAU;;;;;;;;;;;KAEtB,CAAA;IACM,MAAM,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,CAA4B,CAAA;IACjF,MAAM,SAAS,EAAE,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,CAA6B,CAAA;IACnF,MAAM,WAAW;;;;;;;;;;;;;;;KAAgC,CAAA;IACxD,KAAY,cAAc,GAAG,MAAM,OAAO,SAAS,CAAA;IACnD,KAAY,eAAe,GAAG,MAAM,OAAO,UAAU,CAAA;CACxD"}
|
package/dist/EffectFactories.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { UUID } from "@opendaw/lib-std";
|
|
2
|
-
import { ArpeggioDeviceBox, CompressorDeviceBox, CrusherDeviceBox, DattorroReverbDeviceBox, DelayDeviceBox, FoldDeviceBox, GrooveShuffleBox, ModularAudioInputBox, ModularAudioOutputBox, ModularBox, ModularDeviceBox, ModuleConnectionBox, PitchDeviceBox, RevampDeviceBox, ReverbDeviceBox, StereoToolDeviceBox, TidalDeviceBox, VelocityDeviceBox, ZeitgeistDeviceBox } from "@opendaw/studio-boxes";
|
|
2
|
+
import { ArpeggioDeviceBox, CompressorDeviceBox, CrusherDeviceBox, DattorroReverbDeviceBox, DelayDeviceBox, FoldDeviceBox, GrooveShuffleBox, MaximizerDeviceBox, ModularAudioInputBox, ModularAudioOutputBox, ModularBox, ModularDeviceBox, ModuleConnectionBox, PitchDeviceBox, RevampDeviceBox, ReverbDeviceBox, StereoToolDeviceBox, TidalDeviceBox, VelocityDeviceBox, ZeitgeistDeviceBox } from "@opendaw/studio-boxes";
|
|
3
3
|
import { IconSymbol } from "@opendaw/studio-enums";
|
|
4
|
+
import { DeviceManualUrls } from "@opendaw/studio-adapters";
|
|
4
5
|
import { EffectParameterDefaults } from "./EffectParameterDefaults";
|
|
5
6
|
export var EffectFactories;
|
|
6
7
|
(function (EffectFactories) {
|
|
@@ -8,6 +9,7 @@ export var EffectFactories;
|
|
|
8
9
|
defaultName: "Arpeggio",
|
|
9
10
|
defaultIcon: IconSymbol.Stack,
|
|
10
11
|
description: "Generates rhythmic note sequences from chords",
|
|
12
|
+
manualPage: DeviceManualUrls.Arpeggio,
|
|
11
13
|
separatorBefore: false,
|
|
12
14
|
type: "midi",
|
|
13
15
|
create: ({ boxGraph }, hostField, index) => ArpeggioDeviceBox.create(boxGraph, UUID.generate(), box => {
|
|
@@ -20,6 +22,7 @@ export var EffectFactories;
|
|
|
20
22
|
defaultName: "Pitch",
|
|
21
23
|
defaultIcon: IconSymbol.Note,
|
|
22
24
|
description: "Shifts the pitch of incoming notes",
|
|
25
|
+
manualPage: DeviceManualUrls.Pitch,
|
|
23
26
|
separatorBefore: false,
|
|
24
27
|
type: "midi",
|
|
25
28
|
create: ({ boxGraph }, hostField, index) => PitchDeviceBox.create(boxGraph, UUID.generate(), box => {
|
|
@@ -32,7 +35,7 @@ export var EffectFactories;
|
|
|
32
35
|
defaultName: "Velocity",
|
|
33
36
|
defaultIcon: IconSymbol.Velocity,
|
|
34
37
|
description: "Manipulates the velocity of incoming notes",
|
|
35
|
-
manualPage:
|
|
38
|
+
manualPage: DeviceManualUrls.Velocity,
|
|
36
39
|
separatorBefore: false,
|
|
37
40
|
type: "midi",
|
|
38
41
|
create: ({ boxGraph }, hostField, index) => VelocityDeviceBox.create(boxGraph, UUID.generate(), box => {
|
|
@@ -45,6 +48,7 @@ export var EffectFactories;
|
|
|
45
48
|
defaultName: "Zeitgeist",
|
|
46
49
|
defaultIcon: IconSymbol.Zeitgeist,
|
|
47
50
|
description: "Distorts space and time",
|
|
51
|
+
manualPage: DeviceManualUrls.Zeitgeist,
|
|
48
52
|
separatorBefore: false,
|
|
49
53
|
type: "midi",
|
|
50
54
|
create: ({ boxGraph, rootBoxAdapter }, hostField, index) => {
|
|
@@ -67,6 +71,7 @@ export var EffectFactories;
|
|
|
67
71
|
defaultName: "Stereo Tool",
|
|
68
72
|
defaultIcon: IconSymbol.Stereo,
|
|
69
73
|
description: "Computes a stereo transformation matrix with volume, panning, phase inversion and stereo width.",
|
|
74
|
+
manualPage: DeviceManualUrls.StereoTool,
|
|
70
75
|
separatorBefore: false,
|
|
71
76
|
type: "audio",
|
|
72
77
|
create: ({ boxGraph }, hostField, index) => StereoToolDeviceBox.create(boxGraph, UUID.generate(), box => {
|
|
@@ -79,6 +84,7 @@ export var EffectFactories;
|
|
|
79
84
|
defaultName: "Delay",
|
|
80
85
|
defaultIcon: IconSymbol.Time,
|
|
81
86
|
description: "Echoes the input signal with time-based repeats",
|
|
87
|
+
manualPage: DeviceManualUrls.Delay,
|
|
82
88
|
separatorBefore: false,
|
|
83
89
|
type: "audio",
|
|
84
90
|
create: ({ boxGraph }, hostField, index) => DelayDeviceBox.create(boxGraph, UUID.generate(), box => {
|
|
@@ -91,6 +97,7 @@ export var EffectFactories;
|
|
|
91
97
|
defaultName: "Dattorro Reverb",
|
|
92
98
|
defaultIcon: IconSymbol.Dattorro,
|
|
93
99
|
description: "Dense algorithmic reverb based on Dattorro's design, capable of infinite decay",
|
|
100
|
+
manualPage: DeviceManualUrls.DattorroReverb,
|
|
94
101
|
separatorBefore: false,
|
|
95
102
|
type: "audio",
|
|
96
103
|
create: ({ boxGraph }, hostField, index) => DattorroReverbDeviceBox.create(boxGraph, UUID.generate(), box => {
|
|
@@ -99,10 +106,24 @@ export var EffectFactories;
|
|
|
99
106
|
box.host.refer(hostField);
|
|
100
107
|
})
|
|
101
108
|
};
|
|
109
|
+
EffectFactories.Maximizer = {
|
|
110
|
+
defaultName: "Maximizer",
|
|
111
|
+
defaultIcon: IconSymbol.Volume,
|
|
112
|
+
description: "Brickwall limiter with automatic makeup gain",
|
|
113
|
+
manualPage: DeviceManualUrls.Maximizer,
|
|
114
|
+
separatorBefore: false,
|
|
115
|
+
type: "audio",
|
|
116
|
+
create: ({ boxGraph }, hostField, index) => MaximizerDeviceBox.create(boxGraph, UUID.generate(), box => {
|
|
117
|
+
box.label.setValue("Maximizer");
|
|
118
|
+
box.index.setValue(index);
|
|
119
|
+
box.host.refer(hostField);
|
|
120
|
+
})
|
|
121
|
+
};
|
|
102
122
|
EffectFactories.Compressor = {
|
|
103
123
|
defaultName: "Compressor",
|
|
104
124
|
defaultIcon: IconSymbol.Compressor,
|
|
105
125
|
description: "Reduces the dynamic range by attenuating signals above a threshold",
|
|
126
|
+
manualPage: DeviceManualUrls.Compressor,
|
|
106
127
|
separatorBefore: false,
|
|
107
128
|
type: "audio",
|
|
108
129
|
create: ({ boxGraph }, hostField, index) => CompressorDeviceBox.create(boxGraph, UUID.generate(), box => {
|
|
@@ -115,6 +136,7 @@ export var EffectFactories;
|
|
|
115
136
|
defaultName: "Cheap Reverb",
|
|
116
137
|
defaultIcon: IconSymbol.Cube,
|
|
117
138
|
description: "Simulates space and depth with reflections",
|
|
139
|
+
manualPage: DeviceManualUrls.Reverb,
|
|
118
140
|
separatorBefore: false,
|
|
119
141
|
type: "audio",
|
|
120
142
|
create: ({ boxGraph }, hostField, index) => ReverbDeviceBox.create(boxGraph, UUID.generate(), box => {
|
|
@@ -128,6 +150,7 @@ export var EffectFactories;
|
|
|
128
150
|
defaultName: "Crusher",
|
|
129
151
|
defaultIcon: IconSymbol.Bug,
|
|
130
152
|
description: "Degrates the audio signal",
|
|
153
|
+
manualPage: DeviceManualUrls.Crusher,
|
|
131
154
|
separatorBefore: false,
|
|
132
155
|
type: "audio",
|
|
133
156
|
create: ({ boxGraph }, hostField, index) => CrusherDeviceBox.create(boxGraph, UUID.generate(), box => {
|
|
@@ -140,6 +163,7 @@ export var EffectFactories;
|
|
|
140
163
|
defaultName: "Fold",
|
|
141
164
|
defaultIcon: IconSymbol.Fold,
|
|
142
165
|
description: "Folds the signal back into audio-range",
|
|
166
|
+
manualPage: DeviceManualUrls.Fold,
|
|
143
167
|
separatorBefore: false,
|
|
144
168
|
type: "audio",
|
|
145
169
|
create: ({ boxGraph }, hostField, index) => FoldDeviceBox.create(boxGraph, UUID.generate(), box => {
|
|
@@ -152,6 +176,7 @@ export var EffectFactories;
|
|
|
152
176
|
defaultName: "Tidal",
|
|
153
177
|
defaultIcon: IconSymbol.Tidal,
|
|
154
178
|
description: "Shape rhythm and space through volume and pan.",
|
|
179
|
+
manualPage: DeviceManualUrls.Tidal,
|
|
155
180
|
separatorBefore: false,
|
|
156
181
|
type: "audio",
|
|
157
182
|
create: ({ boxGraph }, hostField, index) => TidalDeviceBox.create(boxGraph, UUID.generate(), box => {
|
|
@@ -165,6 +190,7 @@ export var EffectFactories;
|
|
|
165
190
|
defaultName: "Revamp",
|
|
166
191
|
defaultIcon: IconSymbol.EQ,
|
|
167
192
|
description: "Shapes the frequency balance of the sound",
|
|
193
|
+
manualPage: DeviceManualUrls.Revamp,
|
|
168
194
|
separatorBefore: false,
|
|
169
195
|
type: "audio",
|
|
170
196
|
create: ({ boxGraph }, hostField, index) => RevampDeviceBox.create(boxGraph, UUID.generate(), box => {
|
|
@@ -177,6 +203,7 @@ export var EffectFactories;
|
|
|
177
203
|
defaultName: "🔇 Create New Modular Audio Effect (inaudible yet)",
|
|
178
204
|
defaultIcon: IconSymbol.Box,
|
|
179
205
|
description: "",
|
|
206
|
+
manualPage: DeviceManualUrls.Modular,
|
|
180
207
|
separatorBefore: true,
|
|
181
208
|
type: "audio",
|
|
182
209
|
create: ({ boxGraph, rootBox, userEditingManager }, hostField, index) => {
|
|
@@ -212,7 +239,7 @@ export var EffectFactories;
|
|
|
212
239
|
};
|
|
213
240
|
EffectFactories.MidiNamed = { Arpeggio: EffectFactories.Arpeggio, Pitch: EffectFactories.Pitch, Velocity: EffectFactories.Velocity, Zeitgeist: EffectFactories.Zeitgeist };
|
|
214
241
|
EffectFactories.AudioNamed = {
|
|
215
|
-
StereoTool: EffectFactories.StereoTool, Compressor: EffectFactories.Compressor, Delay: EffectFactories.Delay, Reverb: EffectFactories.Reverb, DattorroReverb: EffectFactories.DattorroReverb, Revamp: EffectFactories.Revamp, Crusher: EffectFactories.Crusher, Fold: EffectFactories.Fold, Tidal: EffectFactories.Tidal
|
|
242
|
+
StereoTool: EffectFactories.StereoTool, Compressor: EffectFactories.Compressor, Delay: EffectFactories.Delay, Reverb: EffectFactories.Reverb, DattorroReverb: EffectFactories.DattorroReverb, Revamp: EffectFactories.Revamp, Crusher: EffectFactories.Crusher, Fold: EffectFactories.Fold, Tidal: EffectFactories.Tidal, Maximizer: EffectFactories.Maximizer
|
|
216
243
|
};
|
|
217
244
|
EffectFactories.MidiList = Object.values(EffectFactories.MidiNamed);
|
|
218
245
|
EffectFactories.AudioList = Object.values(EffectFactories.AudioNamed);
|
package/dist/EffectFactory.d.ts
CHANGED
|
@@ -1,14 +1,9 @@
|
|
|
1
|
-
import { EffectPointerType } from "@opendaw/studio-adapters";
|
|
2
|
-
import { IconSymbol } from "@opendaw/studio-enums";
|
|
1
|
+
import { DeviceFactory, EffectPointerType } from "@opendaw/studio-adapters";
|
|
3
2
|
import { Field } from "@opendaw/lib-box";
|
|
4
3
|
import { int } from "@opendaw/lib-std";
|
|
5
4
|
import { Project } from "./project";
|
|
6
5
|
import { EffectBox } from "./EffectBox";
|
|
7
|
-
export interface EffectFactory {
|
|
8
|
-
readonly defaultName: string;
|
|
9
|
-
readonly defaultIcon: IconSymbol;
|
|
10
|
-
readonly description: string;
|
|
11
|
-
readonly manualPage?: string;
|
|
6
|
+
export interface EffectFactory extends DeviceFactory {
|
|
12
7
|
readonly separatorBefore: boolean;
|
|
13
8
|
readonly type: "audio" | "midi";
|
|
14
9
|
create(project: Project, host: Field<EffectPointerType>, index: int): EffectBox;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EffectFactory.d.ts","sourceRoot":"","sources":["../src/EffectFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,iBAAiB,EAAC,MAAM,0BAA0B,CAAA;
|
|
1
|
+
{"version":3,"file":"EffectFactory.d.ts","sourceRoot":"","sources":["../src/EffectFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAE,iBAAiB,EAAC,MAAM,0BAA0B,CAAA;AACzE,OAAO,EAAC,KAAK,EAAC,MAAM,kBAAkB,CAAA;AACtC,OAAO,EAAC,GAAG,EAAC,MAAM,kBAAkB,CAAA;AACpC,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AACjC,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAA;AAErC,MAAM,WAAW,aAAc,SAAQ,aAAa;IAChD,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAA;IACjC,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAA;IAE/B,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,iBAAiB,CAAC,EAAE,KAAK,EAAE,GAAG,GAAG,SAAS,CAAA;CAClF"}
|
package/dist/Engine.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { int,
|
|
1
|
+
import { int, Nullable, ObservableValue, Observer, Subscription, Terminable, UUID } from "@opendaw/lib-std";
|
|
2
2
|
import { bpm, ppqn } from "@opendaw/lib-dsp";
|
|
3
|
-
import { ClipNotification, NoteSignal } from "@opendaw/studio-adapters";
|
|
3
|
+
import { ClipNotification, EnginePreferences, NoteSignal } from "@opendaw/studio-adapters";
|
|
4
4
|
import { Project } from "./project";
|
|
5
5
|
export interface Engine extends Terminable {
|
|
6
6
|
play(): void;
|
|
@@ -25,12 +25,10 @@ export interface Engine extends Terminable {
|
|
|
25
25
|
get isPlaying(): ObservableValue<boolean>;
|
|
26
26
|
get isRecording(): ObservableValue<boolean>;
|
|
27
27
|
get isCountingIn(): ObservableValue<boolean>;
|
|
28
|
-
get metronomeEnabled(): MutableObservableValue<boolean>;
|
|
29
28
|
get playbackTimestamp(): ObservableValue<ppqn>;
|
|
30
|
-
get playbackTimestampEnabled(): MutableObservableValue<boolean>;
|
|
31
|
-
get countInBarsTotal(): ObservableValue<int>;
|
|
32
29
|
get countInBeatsRemaining(): ObservableValue<number>;
|
|
33
30
|
get markerState(): ObservableValue<Nullable<[UUID.Bytes, int]>>;
|
|
34
31
|
get project(): Project;
|
|
32
|
+
get preferences(): EnginePreferences;
|
|
35
33
|
}
|
|
36
34
|
//# sourceMappingURL=Engine.d.ts.map
|
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,
|
|
1
|
+
{"version":3,"file":"Engine.d.ts","sourceRoot":"","sources":["../src/Engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAA;AACzG,OAAO,EAAC,GAAG,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAC1C,OAAO,EAAC,gBAAgB,EAAE,iBAAiB,EAAE,UAAU,EAAC,MAAM,0BAA0B,CAAA;AACxF,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AAEjC,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,KAAK,IAAI,IAAI,CAAA;IACb,IAAI,IAAI,IAAI,CAAA;IACZ,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,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,CAAA;IAC/B,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,iBAAiB,IAAI,eAAe,CAAC,IAAI,CAAC,CAAA;IAC9C,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;IACtB,IAAI,WAAW,IAAI,iBAAiB,CAAA;CACvC"}
|
package/dist/EngineFacade.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { DefaultObservableValue, int,
|
|
1
|
+
import { DefaultObservableValue, int, Nullable, ObservableValue, Observer, Subscription, UUID } from "@opendaw/lib-std";
|
|
2
2
|
import { bpm, ppqn } from "@opendaw/lib-dsp";
|
|
3
|
-
import { ClipNotification, NoteSignal } from "@opendaw/studio-adapters";
|
|
3
|
+
import { ClipNotification, EnginePreferences, NoteSignal } from "@opendaw/studio-adapters";
|
|
4
4
|
import { Engine } from "./Engine";
|
|
5
5
|
import { EngineWorklet } from "./EngineWorklet";
|
|
6
6
|
import { Project } from "./project";
|
|
@@ -20,14 +20,12 @@ export declare class EngineFacade implements Engine {
|
|
|
20
20
|
get isPlaying(): ObservableValue<boolean>;
|
|
21
21
|
get isRecording(): ObservableValue<boolean>;
|
|
22
22
|
get isCountingIn(): ObservableValue<boolean>;
|
|
23
|
-
get metronomeEnabled(): MutableObservableValue<boolean>;
|
|
24
23
|
get playbackTimestamp(): ObservableValue<ppqn>;
|
|
25
|
-
get playbackTimestampEnabled(): MutableObservableValue<boolean>;
|
|
26
|
-
get countInBarsTotal(): MutableObservableValue<int>;
|
|
27
24
|
get countInBeatsRemaining(): ObservableValue<int>;
|
|
28
25
|
get markerState(): DefaultObservableValue<Nullable<[UUID.Bytes, int]>>;
|
|
29
26
|
get project(): Project;
|
|
30
27
|
get sampleRate(): number;
|
|
28
|
+
get preferences(): EnginePreferences;
|
|
31
29
|
isReady(): Promise<void>;
|
|
32
30
|
queryLoadingComplete(): Promise<boolean>;
|
|
33
31
|
panic(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EngineFacade.d.ts","sourceRoot":"","sources":["../src/EngineFacade.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,sBAAsB,EACtB,GAAG,EACH,
|
|
1
|
+
{"version":3,"file":"EngineFacade.d.ts","sourceRoot":"","sources":["../src/EngineFacade.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,sBAAsB,EACtB,GAAG,EACH,QAAQ,EACR,eAAe,EACf,QAAQ,EAER,YAAY,EAEZ,IAAI,EACP,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAC,GAAG,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAC1C,OAAO,EACH,gBAAgB,EAChB,iBAAiB,EAGjB,UAAU,EAEb,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAC,MAAM,EAAC,MAAM,UAAU,CAAA;AAC/B,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AAGjC,qBAAa,YAAa,YAAW,MAAM;;;IAoBvC,UAAU,CAAC,OAAO,EAAE,aAAa;IAgBjC,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,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,CAAmB;IAClD,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,iBAAiB,IAAI,eAAe,CAAC,IAAI,CAAC,CAAiC;IAC/E,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;IACzF,IAAI,UAAU,IAAI,MAAM,CAAsF;IAC9G,IAAI,WAAW,IAAI,iBAAiB,CAAiC;IAErE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IACxB,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC;IAGxC,KAAK,IAAI,IAAI;IACb,KAAK,IAAI,IAAI;IACb,IAAI,IAAI,IAAI;IACZ,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
|
@@ -1,29 +1,32 @@
|
|
|
1
1
|
import { DefaultObservableValue, Option, Terminator } from "@opendaw/lib-std";
|
|
2
|
+
import { EngineSettingsSchema } from "@opendaw/studio-adapters";
|
|
3
|
+
import { Preferences } from "@opendaw/lib-fusion";
|
|
2
4
|
export class EngineFacade {
|
|
3
5
|
#terminator = new Terminator();
|
|
4
6
|
#lifecycle = this.#terminator.own(new Terminator());
|
|
5
7
|
#playbackTimestamp = new DefaultObservableValue(0.0);
|
|
6
|
-
#playbackTimestampEnabled = new DefaultObservableValue(true);
|
|
7
|
-
#countInBarsTotal = new DefaultObservableValue(1);
|
|
8
8
|
#countInBeatsRemaining = new DefaultObservableValue(0);
|
|
9
9
|
#position = new DefaultObservableValue(0.0);
|
|
10
10
|
#bpm = new DefaultObservableValue(12.0);
|
|
11
11
|
#isPlaying = new DefaultObservableValue(false);
|
|
12
12
|
#isRecording = new DefaultObservableValue(false);
|
|
13
13
|
#isCountingIn = new DefaultObservableValue(false);
|
|
14
|
-
#metronomeEnabled = new DefaultObservableValue(false);
|
|
15
14
|
#markerState = new DefaultObservableValue(null);
|
|
15
|
+
#preferencesFacade;
|
|
16
16
|
#worklet = Option.None;
|
|
17
|
-
constructor() {
|
|
17
|
+
constructor() {
|
|
18
|
+
this.#preferencesFacade = Preferences.facade("engine-preferences", EngineSettingsSchema);
|
|
19
|
+
}
|
|
18
20
|
setWorklet(worklet) {
|
|
19
21
|
this.#worklet = Option.wrap(worklet);
|
|
22
|
+
this.#preferencesFacade.setHost(worklet.preferences);
|
|
20
23
|
this.#lifecycle.terminate();
|
|
21
|
-
this.#lifecycle.ownAll(worklet.playbackTimestamp.catchupAndSubscribe(owner => this.#playbackTimestamp.setValue(owner.getValue())), worklet.
|
|
24
|
+
this.#lifecycle.ownAll(worklet.playbackTimestamp.catchupAndSubscribe(owner => this.#playbackTimestamp.setValue(owner.getValue())), worklet.countInBeatsRemaining.catchupAndSubscribe(owner => this.#countInBeatsRemaining.setValue(owner.getValue())), worklet.position.catchupAndSubscribe(owner => this.#position.setValue(owner.getValue())), worklet.bpm.catchupAndSubscribe(owner => this.#bpm.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.markerState.catchupAndSubscribe(owner => this.#markerState.setValue(owner.getValue())));
|
|
22
25
|
}
|
|
23
26
|
assertWorklet() { this.#worklet.unwrap("No worklet available"); }
|
|
24
27
|
releaseWorklet() {
|
|
28
|
+
this.#preferencesFacade.releaseHost();
|
|
25
29
|
this.#lifecycle.terminate();
|
|
26
|
-
this.#worklet.ifSome(worklet => worklet.terminate());
|
|
27
30
|
this.#worklet = Option.None;
|
|
28
31
|
}
|
|
29
32
|
play() { this.#worklet.ifSome(worklet => worklet.play()); }
|
|
@@ -36,14 +39,12 @@ export class EngineFacade {
|
|
|
36
39
|
get isPlaying() { return this.#isPlaying; }
|
|
37
40
|
get isRecording() { return this.#isRecording; }
|
|
38
41
|
get isCountingIn() { return this.#isCountingIn; }
|
|
39
|
-
get metronomeEnabled() { return this.#metronomeEnabled; }
|
|
40
42
|
get playbackTimestamp() { return this.#playbackTimestamp; }
|
|
41
|
-
get playbackTimestampEnabled() { return this.#playbackTimestampEnabled; }
|
|
42
|
-
get countInBarsTotal() { return this.#countInBarsTotal; }
|
|
43
43
|
get countInBeatsRemaining() { return this.#countInBeatsRemaining; }
|
|
44
44
|
get markerState() { return this.#markerState; }
|
|
45
45
|
get project() { return this.#worklet.unwrap("No worklet to get project").project; }
|
|
46
46
|
get sampleRate() { return this.#worklet.isEmpty() ? 44_100 : this.#worklet.unwrap().context.sampleRate; }
|
|
47
|
+
get preferences() { return this.#preferencesFacade; }
|
|
47
48
|
isReady() { return this.#worklet.mapOr(worklet => worklet.isReady(), Promise.resolve()); }
|
|
48
49
|
queryLoadingComplete() {
|
|
49
50
|
return this.#worklet.mapOr(worklet => worklet.queryLoadingComplete(), Promise.resolve(false));
|
package/dist/EngineWorklet.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { int, MutableObservableValue, Nullable, ObservableValue, Observer, Subscription, UUID } from "@opendaw/lib-std";
|
|
2
2
|
import { bpm, ppqn } from "@opendaw/lib-dsp";
|
|
3
|
-
import { ClipNotification, ExportStemsConfiguration, NoteSignal, ProcessorOptions } from "@opendaw/studio-adapters";
|
|
3
|
+
import { ClipNotification, EngineSettings, ExportStemsConfiguration, NoteSignal, PreferencesHost, ProcessorOptions } from "@opendaw/studio-adapters";
|
|
4
4
|
import { Engine } from "./Engine";
|
|
5
5
|
import { Project } from "./project";
|
|
6
6
|
export declare class EngineWorklet extends AudioWorkletNode implements Engine {
|
|
@@ -19,15 +19,13 @@ export declare class EngineWorklet extends AudioWorkletNode implements Engine {
|
|
|
19
19
|
get isPlaying(): ObservableValue<boolean>;
|
|
20
20
|
get isRecording(): ObservableValue<boolean>;
|
|
21
21
|
get isCountingIn(): ObservableValue<boolean>;
|
|
22
|
-
get countInBarsTotal(): MutableObservableValue<int>;
|
|
23
22
|
get countInBeatsRemaining(): ObservableValue<number>;
|
|
24
23
|
get position(): ObservableValue<ppqn>;
|
|
25
24
|
get bpm(): ObservableValue<bpm>;
|
|
26
25
|
get playbackTimestamp(): MutableObservableValue<number>;
|
|
27
|
-
get playbackTimestampEnabled(): MutableObservableValue<boolean>;
|
|
28
|
-
get metronomeEnabled(): MutableObservableValue<boolean>;
|
|
29
26
|
get markerState(): ObservableValue<Nullable<[UUID.Bytes, int]>>;
|
|
30
27
|
get project(): Project;
|
|
28
|
+
get preferences(): PreferencesHost<EngineSettings>;
|
|
31
29
|
isReady(): Promise<void>;
|
|
32
30
|
queryLoadingComplete(): Promise<boolean>;
|
|
33
31
|
noteSignal(signal: NoteSignal): void;
|
|
@@ -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,EAAY,GAAG,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAIrD,OAAO,EACH,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,EAAY,GAAG,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAIrD,OAAO,EACH,gBAAgB,EAIhB,cAAc,EAKd,wBAAwB,EACxB,UAAU,EACV,eAAe,EACf,gBAAgB,EACnB,MAAM,0BAA0B,CAAA;AAEjC,OAAO,EAAC,MAAM,EAAC,MAAM,UAAU,CAAA;AAC/B,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AAIjC,qBAAa,aAAc,SAAQ,gBAAiB,YAAW,MAAM;;IACjE,MAAM,CAAC,EAAE,EAAE,GAAG,CAAQ;IAEtB,QAAQ,CAAC,EAAE,SAAqB;gBAsBpB,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,OAAO,EAChB,mBAAmB,CAAC,EAAE,wBAAwB,EAC9C,OAAO,CAAC,EAAE,gBAAgB;IAgItC,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;IACb,KAAK,IAAI,IAAI;IAIb,IAAI,IAAI,IAAI;IAEZ,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,qBAAqB,IAAI,eAAe,CAAC,MAAM,CAAC,CAAqC;IACzF,IAAI,QAAQ,IAAI,eAAe,CAAC,IAAI,CAAC,CAAwB;IAC7D,IAAI,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,CAAmB;IAClD,IAAI,iBAAiB,IAAI,sBAAsB,CAAC,MAAM,CAAC,CAAiC;IACxF,IAAI,WAAW,IAAI,eAAe,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAA2B;IAC1F,IAAI,OAAO,IAAI,OAAO,CAAuB;IAC7C,IAAI,WAAW,IAAI,eAAe,CAAC,cAAc,CAAC,CAA2B;IAE7E,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;CAKpB"}
|
package/dist/EngineWorklet.js
CHANGED
|
@@ -2,7 +2,7 @@ import { Arrays, DefaultObservableValue, Notifier, Option, SyncStream, Terminato
|
|
|
2
2
|
import { SyncSource } from "@opendaw/lib-box";
|
|
3
3
|
import { AnimationFrame } from "@opendaw/lib-dom";
|
|
4
4
|
import { Communicator, Messenger } from "@opendaw/lib-runtime";
|
|
5
|
-
import { EngineStateSchema, ExportStemsConfiguration } from "@opendaw/studio-adapters";
|
|
5
|
+
import { EngineSettingsSchema, EngineStateSchema, ExportStemsConfiguration, PreferencesHost } from "@opendaw/studio-adapters";
|
|
6
6
|
import { MIDIReceiver } from "./midi/MIDIReceiver";
|
|
7
7
|
export class EngineWorklet extends AudioWorkletNode {
|
|
8
8
|
static ID = 0 | 0;
|
|
@@ -10,15 +10,13 @@ export class EngineWorklet extends AudioWorkletNode {
|
|
|
10
10
|
#terminator = new Terminator();
|
|
11
11
|
#project;
|
|
12
12
|
#playbackTimestamp = new DefaultObservableValue(0.0);
|
|
13
|
-
#playbackTimestampEnabled = new DefaultObservableValue(true);
|
|
14
13
|
#position = new DefaultObservableValue(0.0);
|
|
15
14
|
#bpm = new DefaultObservableValue(120.0);
|
|
16
15
|
#isPlaying = new DefaultObservableValue(false);
|
|
17
16
|
#isRecording = new DefaultObservableValue(false);
|
|
18
17
|
#isCountingIn = new DefaultObservableValue(false);
|
|
19
|
-
#countInBarsTotal = new DefaultObservableValue(1);
|
|
20
18
|
#countInBeatsRemaining = new DefaultObservableValue(0);
|
|
21
|
-
#
|
|
19
|
+
#preferences;
|
|
22
20
|
#markerState = new DefaultObservableValue(null);
|
|
23
21
|
#controlFlags;
|
|
24
22
|
#notifyClipNotification;
|
|
@@ -66,15 +64,6 @@ export class EngineWorklet extends AudioWorkletNode {
|
|
|
66
64
|
dispatcher.dispatchAndForget(this.prepareRecordingState, countIn);
|
|
67
65
|
}
|
|
68
66
|
stopRecording() { dispatcher.dispatchAndForget(this.stopRecording); }
|
|
69
|
-
setMetronomeEnabled(enabled) {
|
|
70
|
-
dispatcher.dispatchAndForget(this.setMetronomeEnabled, enabled);
|
|
71
|
-
}
|
|
72
|
-
setPlaybackTimestampEnabled(enabled) {
|
|
73
|
-
dispatcher.dispatchAndForget(this.setPlaybackTimestampEnabled, enabled);
|
|
74
|
-
}
|
|
75
|
-
setCountInBarsTotal(value) {
|
|
76
|
-
dispatcher.dispatchAndForget(this.setCountInBarsTotal, value);
|
|
77
|
-
}
|
|
78
67
|
queryLoadingComplete() {
|
|
79
68
|
return dispatcher.dispatchAndReturn(this.queryLoadingComplete);
|
|
80
69
|
}
|
|
@@ -146,7 +135,8 @@ export class EngineWorklet extends AudioWorkletNode {
|
|
|
146
135
|
},
|
|
147
136
|
switchMarkerState: (state) => this.#markerState.setValue(state)
|
|
148
137
|
});
|
|
149
|
-
this.#
|
|
138
|
+
this.#preferences = this.#terminator.own(new PreferencesHost(EngineSettingsSchema.parse({})));
|
|
139
|
+
this.#terminator.ownAll(AnimationFrame.add(() => reader.tryRead()), project.liveStreamReceiver.connect(messenger.channel("engine-live-data")), this.#preferences.syncWith(messenger.channel("engine-preferences")), new SyncSource(project.boxGraph, messenger.channel("engine-sync"), false));
|
|
150
140
|
}
|
|
151
141
|
play() { this.#commands.play(); }
|
|
152
142
|
stop(reset = false) { this.#commands.stop(reset); }
|
|
@@ -162,15 +152,13 @@ export class EngineWorklet extends AudioWorkletNode {
|
|
|
162
152
|
get isPlaying() { return this.#isPlaying; }
|
|
163
153
|
get isRecording() { return this.#isRecording; }
|
|
164
154
|
get isCountingIn() { return this.#isCountingIn; }
|
|
165
|
-
get countInBarsTotal() { return this.#countInBarsTotal; }
|
|
166
155
|
get countInBeatsRemaining() { return this.#countInBeatsRemaining; }
|
|
167
156
|
get position() { return this.#position; }
|
|
168
157
|
get bpm() { return this.#bpm; }
|
|
169
158
|
get playbackTimestamp() { return this.#playbackTimestamp; }
|
|
170
|
-
get playbackTimestampEnabled() { return this.#playbackTimestampEnabled; }
|
|
171
|
-
get metronomeEnabled() { return this.#metronomeEnabled; }
|
|
172
159
|
get markerState() { return this.#markerState; }
|
|
173
160
|
get project() { return this.#project; }
|
|
161
|
+
get preferences() { return this.#preferences; }
|
|
174
162
|
isReady() { return this.#isReady; }
|
|
175
163
|
queryLoadingComplete() { return this.#commands.queryLoadingComplete(); }
|
|
176
164
|
noteSignal(signal) { this.#commands.noteSignal(signal); }
|
|
@@ -191,7 +179,7 @@ export class EngineWorklet extends AudioWorkletNode {
|
|
|
191
179
|
return this.#notifyClipNotification.subscribe(observer);
|
|
192
180
|
}
|
|
193
181
|
terminate() {
|
|
194
|
-
|
|
182
|
+
this.#commands.terminate();
|
|
195
183
|
this.#terminator.terminate();
|
|
196
184
|
this.disconnect();
|
|
197
185
|
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { int, Option, Progress } from "@opendaw/lib-std";
|
|
2
|
+
import { AudioData } from "@opendaw/lib-dsp";
|
|
3
|
+
import { ExportStemsConfiguration } from "@opendaw/studio-adapters";
|
|
4
|
+
import { Project } from "./project";
|
|
5
|
+
export declare namespace OfflineEngineRenderer {
|
|
6
|
+
const install: (url: string) => void;
|
|
7
|
+
const getWorkerUrl: () => string;
|
|
8
|
+
const start: (source: Project, optExportConfiguration: Option<ExportStemsConfiguration>, progress: Progress.Handler, abortSignal?: AbortSignal, sampleRate?: int) => Promise<AudioData>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=OfflineEngineRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OfflineEngineRenderer.d.ts","sourceRoot":"","sources":["../src/OfflineEngineRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,GAAG,EAAa,MAAM,EAAS,QAAQ,EAAmB,MAAM,kBAAkB,CAAA;AAClG,OAAO,EAAC,SAAS,EAAO,MAAM,kBAAkB,CAAA;AAEhD,OAAO,EAGH,wBAAwB,EAK3B,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AAIjC,yBAAiB,qBAAqB,CAAC;IAG5B,MAAM,OAAO,GAAI,KAAK,MAAM,KAAG,IAGrC,CAAA;IAEM,MAAM,YAAY,QAAO,MAE/B,CAAA;IAEM,MAAM,KAAK,GAAU,QAAQ,OAAO,EACf,wBAAwB,MAAM,CAAC,wBAAwB,CAAC,EACxD,UAAU,QAAQ,CAAC,OAAO,EAC1B,cAAc,WAAW,EACzB,aAAY,GAAY,KAAG,OAAO,CAAC,SAAS,CAuIvE,CAAA;CACJ"}
|