@opendaw/studio-core 0.0.43 → 0.0.45
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/AssetService.d.ts +12 -2
- package/dist/AssetService.d.ts.map +1 -1
- package/dist/AssetService.js +46 -1
- package/dist/AudioOfflineRenderer.d.ts +1 -2
- package/dist/AudioOfflineRenderer.d.ts.map +1 -1
- package/dist/AudioOfflineRenderer.js +10 -3
- package/dist/EffectBox.d.ts +2 -2
- package/dist/EffectBox.d.ts.map +1 -1
- package/dist/EffectFactories.d.ts +6 -0
- package/dist/EffectFactories.d.ts.map +1 -1
- package/dist/EffectFactories.js +29 -24
- package/dist/EffectFactory.d.ts +1 -1
- package/dist/EffectFactory.d.ts.map +1 -1
- package/dist/EffectParameterDefaults.d.ts +5 -0
- package/dist/EffectParameterDefaults.d.ts.map +1 -0
- package/dist/EffectParameterDefaults.js +27 -0
- package/dist/Engine.d.ts +1 -1
- package/dist/Engine.d.ts.map +1 -1
- package/dist/EngineFacade.d.ts +1 -1
- package/dist/EngineFacade.d.ts.map +1 -1
- package/dist/EngineFacade.js +1 -1
- package/dist/EngineWorklet.d.ts +2 -2
- package/dist/EngineWorklet.d.ts.map +1 -1
- package/dist/EngineWorklet.js +3 -2
- package/dist/Preferences.d.ts +20 -0
- package/dist/Preferences.d.ts.map +1 -0
- package/dist/Preferences.js +46 -0
- package/dist/capture/CaptureDevices.js +3 -3
- package/dist/capture/RecordTrack.d.ts +2 -2
- package/dist/capture/RecordTrack.d.ts.map +1 -1
- package/dist/capture/Recording.d.ts +1 -1
- package/dist/capture/Recording.d.ts.map +1 -1
- package/dist/capture/Recording.js +1 -1
- package/dist/cloud/CloudAuthManager.d.ts +6 -2
- package/dist/cloud/CloudAuthManager.d.ts.map +1 -1
- package/dist/cloud/CloudAuthManager.js +12 -12
- package/dist/cloud/CloudBackup.js +1 -1
- package/dist/cloud/{CloudBackupSoundfont.d.ts → CloudBackupSoundfonts.d.ts} +1 -1
- package/dist/cloud/CloudBackupSoundfonts.d.ts.map +1 -0
- package/dist/cloud/{CloudBackupSoundfont.js → CloudBackupSoundfonts.js} +1 -1
- package/dist/dawproject/BuiltinDevices.d.ts.map +1 -1
- package/dist/dawproject/BuiltinDevices.js +3 -2
- package/dist/dawproject/{DawProjectImport.d.ts → DawProjectImporter.d.ts} +1 -1
- package/dist/dawproject/DawProjectImporter.d.ts.map +1 -0
- package/dist/dawproject/{DawProjectImport.js → DawProjectImporter.js} +17 -5
- package/dist/dawproject/DawProjectImporter.test.d.ts +2 -0
- package/dist/dawproject/DawProjectImporter.test.d.ts.map +1 -0
- package/dist/dawproject/{DawProjectImport.test.js → DawProjectImporter.test.js} +1 -1
- package/dist/dawproject/DawProjectService.js +1 -1
- package/dist/dawproject/index.d.ts +1 -1
- package/dist/dawproject/index.d.ts.map +1 -1
- package/dist/dawproject/index.js +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/midi/MIDILearning.d.ts +1 -1
- package/dist/midi/MIDILearning.d.ts.map +1 -1
- package/dist/midi/MIDILearning.js +22 -3
- package/dist/processors.js +27 -5
- package/dist/processors.js.map +4 -4
- package/dist/project/Project.d.ts +12 -8
- package/dist/project/Project.d.ts.map +1 -1
- package/dist/project/Project.js +45 -33
- package/dist/project/ProjectMigration.d.ts.map +1 -1
- package/dist/project/ProjectMigration.js +10 -1
- package/dist/project/Recovery.d.ts +9 -0
- package/dist/project/Recovery.d.ts.map +1 -0
- package/dist/project/Recovery.js +49 -0
- 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/OpenSampleAPI.d.ts.map +1 -1
- package/dist/samples/OpenSampleAPI.js +5 -3
- package/dist/samples/SampleService.d.ts +5 -2
- package/dist/samples/SampleService.d.ts.map +1 -1
- package/dist/samples/SampleService.js +12 -4
- package/dist/samples/SampleStorage.d.ts +1 -1
- package/dist/samples/SampleStorage.d.ts.map +1 -1
- package/dist/samples/SampleStorage.js +1 -1
- package/dist/soundfont/DefaultSoundfontLoader.d.ts +2 -1
- package/dist/soundfont/DefaultSoundfontLoader.d.ts.map +1 -1
- package/dist/soundfont/DefaultSoundfontLoader.js +14 -4
- package/dist/soundfont/DefaultSoundfontLoaderManager.d.ts +2 -1
- package/dist/soundfont/DefaultSoundfontLoaderManager.d.ts.map +1 -1
- package/dist/soundfont/DefaultSoundfontLoaderManager.js +1 -0
- package/dist/soundfont/OpenSoundfontAPI.d.ts.map +1 -1
- package/dist/soundfont/OpenSoundfontAPI.js +6 -4
- package/dist/soundfont/SoundfontService.d.ts +5 -2
- package/dist/soundfont/SoundfontService.d.ts.map +1 -1
- package/dist/soundfont/SoundfontService.js +18 -8
- package/dist/workers-main.js +2 -2
- package/dist/workers-main.js.map +4 -4
- package/dist/ysync/YService.d.ts.map +1 -1
- package/dist/ysync/YService.js +4 -2
- package/dist/ysync/YSync.d.ts.map +1 -1
- package/dist/ysync/YSync.js +79 -51
- package/package.json +49 -48
- package/dist/cloud/CloudBackupSoundfont.d.ts.map +0 -1
- package/dist/dawproject/DawProjectImport.d.ts.map +0 -1
- package/dist/dawproject/DawProjectImport.test.d.ts +0 -2
- package/dist/dawproject/DawProjectImport.test.d.ts.map +0 -1
- package/dist/env.d.ts +0 -6
- package/dist/env.d.ts.map +0 -1
- package/dist/env.js +0 -9
package/dist/AssetService.d.ts
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import { Procedure, Progress, UUID } from "@opendaw/lib-std";
|
|
1
|
+
import { Class, Procedure, Progress, UUID } from "@opendaw/lib-std";
|
|
2
|
+
import { BoxGraph } from "@opendaw/lib-box";
|
|
3
|
+
import { Sample, Soundfont } from "@opendaw/studio-adapters";
|
|
4
|
+
import { AudioFileBox, SoundfontFileBox } from "@opendaw/studio-boxes";
|
|
2
5
|
export declare namespace AssetService {
|
|
3
6
|
type ImportArgs = {
|
|
4
7
|
uuid?: UUID.Bytes;
|
|
@@ -7,12 +10,19 @@ export declare namespace AssetService {
|
|
|
7
10
|
progressHandler?: Progress.Handler;
|
|
8
11
|
};
|
|
9
12
|
}
|
|
10
|
-
export declare abstract class AssetService<T> {
|
|
13
|
+
export declare abstract class AssetService<T extends Sample | Soundfont> {
|
|
11
14
|
protected readonly onUpdate: Procedure<T>;
|
|
12
15
|
protected abstract readonly nameSingular: string;
|
|
13
16
|
protected abstract readonly namePlural: string;
|
|
17
|
+
protected abstract readonly boxType: Class<AudioFileBox | SoundfontFileBox>;
|
|
18
|
+
protected abstract readonly filePickerOptions: FilePickerOptions;
|
|
14
19
|
protected constructor(onUpdate: Procedure<T>);
|
|
20
|
+
browse(multiple: boolean): Promise<ReadonlyArray<T>>;
|
|
15
21
|
abstract importFile(args: AssetService.ImportArgs): Promise<T>;
|
|
22
|
+
replaceMissingFiles(boxGraph: BoxGraph, manager: {
|
|
23
|
+
invalidate: (uuid: UUID.Bytes) => void;
|
|
24
|
+
}): Promise<void>;
|
|
16
25
|
protected browseFiles(multiple: boolean, filePickerSettings: FilePickerOptions): Promise<ReadonlyArray<T>>;
|
|
26
|
+
protected abstract collectAllFiles(): Promise<ReadonlyArray<T>>;
|
|
17
27
|
}
|
|
18
28
|
//# sourceMappingURL=AssetService.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssetService.d.ts","sourceRoot":"","sources":["../src/AssetService.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"AssetService.d.ts","sourceRoot":"","sources":["../src/AssetService.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,KAAK,EAML,SAAS,EACT,QAAQ,EAER,IAAI,EACP,MAAM,kBAAkB,CAAA;AAGzB,OAAO,EAAC,QAAQ,EAAC,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAC,MAAM,EAAE,SAAS,EAAC,MAAM,0BAA0B,CAAA;AAC1D,OAAO,EAAC,YAAY,EAAE,gBAAgB,EAAC,MAAM,uBAAuB,CAAA;AAEpE,yBAAiB,YAAY,CAAC;IAC1B,KAAY,UAAU,GAAG;QACrB,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,CAAA;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,WAAW,CAAC;QACzB,eAAe,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAA;KACrC,CAAA;CACJ;AAED,8BAAsB,YAAY,CAAC,CAAC,SAAS,MAAM,GAAG,SAAS;IAMrC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;IAL/D,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAChD,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC9C,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,YAAY,GAAG,gBAAgB,CAAC,CAAA;IAC3E,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAA;IAEhE,SAAS,aAAgC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;IAEzD,MAAM,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAI1D,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,YAAY,CAAC,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC;IAExD,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE;QAAE,UAAU,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,KAAK,IAAI,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;cA+BjG,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAgChH,SAAS,CAAC,QAAQ,CAAC,eAAe,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;CAClE"}
|
package/dist/AssetService.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DefaultObservableValue, Errors, panic, Progress, RuntimeNotifier } from "@opendaw/lib-std";
|
|
1
|
+
import { DefaultObservableValue, Errors, isInstanceOf, isNotUndefined, panic, Progress, RuntimeNotifier, UUID } from "@opendaw/lib-std";
|
|
2
2
|
import { Files } from "@opendaw/lib-dom";
|
|
3
3
|
import { Promises } from "@opendaw/lib-runtime";
|
|
4
4
|
export class AssetService {
|
|
@@ -6,6 +6,51 @@ export class AssetService {
|
|
|
6
6
|
constructor(onUpdate) {
|
|
7
7
|
this.onUpdate = onUpdate;
|
|
8
8
|
}
|
|
9
|
+
async browse(multiple) {
|
|
10
|
+
return this.browseFiles(multiple, this.filePickerOptions);
|
|
11
|
+
}
|
|
12
|
+
async replaceMissingFiles(boxGraph, manager) {
|
|
13
|
+
const available = await this.collectAllFiles();
|
|
14
|
+
const boxes = boxGraph.boxes().filter(box => isInstanceOf(box, this.boxType));
|
|
15
|
+
if (boxes.length === 0) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
for (const box of boxes) {
|
|
19
|
+
const uuid = box.address.uuid;
|
|
20
|
+
const uuidAsString = UUID.toString(uuid);
|
|
21
|
+
if (isNotUndefined(available.find(({ uuid }) => uuid === uuidAsString))) {
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
const approved = await RuntimeNotifier.approve({
|
|
25
|
+
headline: "Missing Asset",
|
|
26
|
+
message: `Could not find ${this.nameSingular} '${box.fileName.getValue()}'`,
|
|
27
|
+
cancelText: "Ignore",
|
|
28
|
+
approveText: "Browse"
|
|
29
|
+
});
|
|
30
|
+
if (!approved) {
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
const { error, status, value: files } = await Promises.tryCatch(Files.open({ ...this.filePickerOptions, multiple: false }));
|
|
34
|
+
if (status === "rejected") {
|
|
35
|
+
if (Errors.isAbort(error)) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
return panic(String(error));
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
if (files.length === 0) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
const arrayBuffer = await files[0].arrayBuffer();
|
|
46
|
+
const asset = await this.importFile({ uuid, arrayBuffer, progressHandler: Progress.Empty });
|
|
47
|
+
await RuntimeNotifier.info({
|
|
48
|
+
headline: "Replaced Asset",
|
|
49
|
+
message: `${asset.name} has been replaced`
|
|
50
|
+
});
|
|
51
|
+
manager.invalidate(uuid);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
9
54
|
async browseFiles(multiple, filePickerSettings) {
|
|
10
55
|
const { error, status, value: files } = await Promises.tryCatch(Files.open({ ...filePickerSettings, multiple }));
|
|
11
56
|
if (status === "rejected") {
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { int, Option } from "@opendaw/lib-std";
|
|
2
2
|
import { ExportStemsConfiguration } from "@opendaw/studio-adapters";
|
|
3
|
-
import { Project } from "./project
|
|
4
|
-
import { ProjectMeta } from "./project/ProjectMeta";
|
|
3
|
+
import { Project, ProjectMeta } from "./project";
|
|
5
4
|
export declare namespace AudioOfflineRenderer {
|
|
6
5
|
const start: (source: Project, meta: ProjectMeta, optExportConfiguration: Option<ExportStemsConfiguration>, sampleRate?: int) => Promise<void>;
|
|
7
6
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AudioOfflineRenderer.d.ts","sourceRoot":"","sources":["../src/AudioOfflineRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiC,GAAG,EAAE,MAAM,EAAmC,MAAM,kBAAkB,CAAA;AAI9G,OAAO,EAAC,wBAAwB,EAAC,MAAM,0BAA0B,CAAA;AACjE,OAAO,EAAC,OAAO,
|
|
1
|
+
{"version":3,"file":"AudioOfflineRenderer.d.ts","sourceRoot":"","sources":["../src/AudioOfflineRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiC,GAAG,EAAE,MAAM,EAAmC,MAAM,kBAAkB,CAAA;AAI9G,OAAO,EAAC,wBAAwB,EAAC,MAAM,0BAA0B,CAAA;AACjE,OAAO,EAAC,OAAO,EAAE,WAAW,EAAC,MAAM,WAAW,CAAA;AAI9C,yBAAiB,oBAAoB,CAAC;IAC3B,MAAM,KAAK,GAAU,QAAQ,OAAO,EACf,MAAM,WAAW,EACjB,wBAAwB,MAAM,CAAC,wBAAwB,CAAC,EACxD,aAAY,GAAY,KAAG,OAAO,CAAC,IAAI,CAgClE,CAAA;CAwDJ"}
|
|
@@ -76,12 +76,19 @@ export var AudioOfflineRenderer;
|
|
|
76
76
|
});
|
|
77
77
|
zip.file(`${trackNames[stemIndex]}.wav`, file, { binary: true });
|
|
78
78
|
}
|
|
79
|
-
const arrayBuffer = await zip.generateAsync({
|
|
79
|
+
const { status, value: arrayBuffer, error } = await Promises.tryCatch(zip.generateAsync({
|
|
80
80
|
type: "arraybuffer",
|
|
81
81
|
compression: "DEFLATE",
|
|
82
82
|
compressionOptions: { level: 6 }
|
|
83
|
-
});
|
|
83
|
+
}));
|
|
84
84
|
dialog.terminate();
|
|
85
|
+
if (status === "rejected") {
|
|
86
|
+
await RuntimeNotifier.info({
|
|
87
|
+
headline: "Error",
|
|
88
|
+
message: `Could not create zip file: ${String(error)}`
|
|
89
|
+
});
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
85
92
|
const approved = await RuntimeNotifier.approve({
|
|
86
93
|
headline: "Save Zip",
|
|
87
94
|
message: `Size: ${arrayBuffer.byteLength >> 20}M`,
|
|
@@ -91,7 +98,7 @@ export var AudioOfflineRenderer;
|
|
|
91
98
|
return;
|
|
92
99
|
}
|
|
93
100
|
const saveResult = await Promises.tryCatch(Files.save(arrayBuffer, { suggestedName: `${meta.name}.zip` }));
|
|
94
|
-
if (saveResult.status === "rejected") {
|
|
101
|
+
if (saveResult.status === "rejected" && !Errors.isAbort(saveResult.error)) {
|
|
95
102
|
panic(String(saveResult.error));
|
|
96
103
|
}
|
|
97
104
|
};
|
package/dist/EffectBox.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { ArpeggioDeviceBox, DelayDeviceBox, ModularDeviceBox, PitchDeviceBox, RevampDeviceBox, ReverbDeviceBox, StereoToolDeviceBox, UnknownAudioEffectDeviceBox, UnknownMidiEffectDeviceBox, ZeitgeistDeviceBox } from "@opendaw/studio-boxes";
|
|
2
|
-
export type EffectBox = ArpeggioDeviceBox | PitchDeviceBox | ZeitgeistDeviceBox | UnknownMidiEffectDeviceBox | DelayDeviceBox | ReverbDeviceBox | RevampDeviceBox | StereoToolDeviceBox | ModularDeviceBox | UnknownAudioEffectDeviceBox;
|
|
1
|
+
import { ArpeggioDeviceBox, CompressorDeviceBox, CrusherDeviceBox, DelayDeviceBox, ModularDeviceBox, PitchDeviceBox, RevampDeviceBox, ReverbDeviceBox, StereoToolDeviceBox, UnknownAudioEffectDeviceBox, UnknownMidiEffectDeviceBox, ZeitgeistDeviceBox } from "@opendaw/studio-boxes";
|
|
2
|
+
export type EffectBox = ArpeggioDeviceBox | PitchDeviceBox | ZeitgeistDeviceBox | UnknownMidiEffectDeviceBox | DelayDeviceBox | ReverbDeviceBox | RevampDeviceBox | StereoToolDeviceBox | ModularDeviceBox | UnknownAudioEffectDeviceBox | CompressorDeviceBox | CrusherDeviceBox;
|
|
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,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,2BAA2B,EAC3B,0BAA0B,EAC1B,kBAAkB,EACrB,MAAM,uBAAuB,CAAA;AAE9B,MAAM,MAAM,SAAS,GACf,iBAAiB,GAAG,cAAc,GAAG,kBAAkB,GAAG,0BAA0B,GACpF,cAAc,GAAG,eAAe,GAAG,eAAe,GAAG,mBAAmB,GACxE,gBAAgB,GAAG,2BAA2B,CAAA"}
|
|
1
|
+
{"version":3,"file":"EffectBox.d.ts","sourceRoot":"","sources":["../src/EffectBox.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,2BAA2B,EAC3B,0BAA0B,EAC1B,kBAAkB,EACrB,MAAM,uBAAuB,CAAA;AAE9B,MAAM,MAAM,SAAS,GACf,iBAAiB,GAAG,cAAc,GAAG,kBAAkB,GAAG,0BAA0B,GACpF,cAAc,GAAG,eAAe,GAAG,eAAe,GAAG,mBAAmB,GACxE,gBAAgB,GAAG,2BAA2B,GAAG,mBAAmB,GAAG,gBAAgB,CAAA"}
|
|
@@ -5,7 +5,9 @@ export declare namespace EffectFactories {
|
|
|
5
5
|
const Zeitgeist: EffectFactory;
|
|
6
6
|
const StereoTool: EffectFactory;
|
|
7
7
|
const Delay: EffectFactory;
|
|
8
|
+
const Compressor: EffectFactory;
|
|
8
9
|
const Reverb: EffectFactory;
|
|
10
|
+
const Crusher: EffectFactory;
|
|
9
11
|
const Revamp: EffectFactory;
|
|
10
12
|
const Modular: EffectFactory;
|
|
11
13
|
const MidiNamed: {
|
|
@@ -15,18 +17,22 @@ export declare namespace EffectFactories {
|
|
|
15
17
|
};
|
|
16
18
|
const AudioNamed: {
|
|
17
19
|
StereoTool: EffectFactory;
|
|
20
|
+
Compressor: EffectFactory;
|
|
18
21
|
Delay: EffectFactory;
|
|
19
22
|
Reverb: EffectFactory;
|
|
20
23
|
Revamp: EffectFactory;
|
|
24
|
+
Crusher: EffectFactory;
|
|
21
25
|
Modular: EffectFactory;
|
|
22
26
|
};
|
|
23
27
|
const MidiList: ReadonlyArray<Readonly<EffectFactory>>;
|
|
24
28
|
const AudioList: ReadonlyArray<Readonly<EffectFactory>>;
|
|
25
29
|
const MergedNamed: {
|
|
26
30
|
StereoTool: EffectFactory;
|
|
31
|
+
Compressor: EffectFactory;
|
|
27
32
|
Delay: EffectFactory;
|
|
28
33
|
Reverb: EffectFactory;
|
|
29
34
|
Revamp: EffectFactory;
|
|
35
|
+
Crusher: EffectFactory;
|
|
30
36
|
Modular: EffectFactory;
|
|
31
37
|
Arpeggio: EffectFactory;
|
|
32
38
|
Pitch: 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":"AAmBA,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAA;AAG7C,yBAAiB,eAAe,CAAC;IACtB,MAAM,QAAQ,EAAE,aAWtB,CAAA;IAEM,MAAM,KAAK,EAAE,aAWnB,CAAA;IAEM,MAAM,SAAS,EAAE,aAqBvB,CAAA;IAEM,MAAM,UAAU,EAAE,aAYxB,CAAA;IAEM,MAAM,KAAK,EAAE,aAYnB,CAAA;IAEM,MAAM,UAAU,EAAE,aAYxB,CAAA;IAEM,MAAM,MAAM,EAAE,aAapB,CAAA;IAEM,MAAM,OAAO,EAAE,aAYrB,CAAA;IAEM,MAAM,MAAM,EAAE,aAYpB,CAAA;IAEM,MAAM,OAAO,EAAE,aAoCrB,CAAA;IAEM,MAAM,SAAS;;;;KAA+B,CAAA;IAC9C,MAAM,UAAU;;;;;;;;KAAoE,CAAA;IACpF,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
|
-
import {
|
|
2
|
-
import { ArpeggioDeviceBox, DelayDeviceBox, GrooveShuffleBox, ModularAudioInputBox, ModularAudioOutputBox, ModularBox, ModularDeviceBox, ModuleConnectionBox, PitchDeviceBox, RevampDeviceBox, ReverbDeviceBox, StereoToolDeviceBox, ZeitgeistDeviceBox } from "@opendaw/studio-boxes";
|
|
1
|
+
import { UUID } from "@opendaw/lib-std";
|
|
2
|
+
import { ArpeggioDeviceBox, CompressorDeviceBox, CrusherDeviceBox, DelayDeviceBox, GrooveShuffleBox, ModularAudioInputBox, ModularAudioOutputBox, ModularBox, ModularDeviceBox, ModuleConnectionBox, PitchDeviceBox, RevampDeviceBox, ReverbDeviceBox, StereoToolDeviceBox, ZeitgeistDeviceBox } from "@opendaw/studio-boxes";
|
|
3
3
|
import { IconSymbol } from "@opendaw/studio-adapters";
|
|
4
|
+
import { EffectParameterDefaults } from "./EffectParameterDefaults";
|
|
4
5
|
export var EffectFactories;
|
|
5
6
|
(function (EffectFactories) {
|
|
6
7
|
EffectFactories.Arpeggio = {
|
|
@@ -73,6 +74,18 @@ export var EffectFactories;
|
|
|
73
74
|
box.host.refer(unit);
|
|
74
75
|
})
|
|
75
76
|
};
|
|
77
|
+
EffectFactories.Compressor = {
|
|
78
|
+
defaultName: "Compressor",
|
|
79
|
+
defaultIcon: IconSymbol.Compressor,
|
|
80
|
+
description: "Reduces the dynamic range by attenuating signals above a threshold",
|
|
81
|
+
separatorBefore: false,
|
|
82
|
+
type: "audio",
|
|
83
|
+
create: ({ boxGraph }, unit, index) => CompressorDeviceBox.create(boxGraph, UUID.generate(), box => {
|
|
84
|
+
box.label.setValue("Compressor");
|
|
85
|
+
box.index.setValue(index);
|
|
86
|
+
box.host.refer(unit);
|
|
87
|
+
})
|
|
88
|
+
};
|
|
76
89
|
EffectFactories.Reverb = {
|
|
77
90
|
defaultName: "Reverb",
|
|
78
91
|
defaultIcon: IconSymbol.Cube,
|
|
@@ -86,6 +99,18 @@ export var EffectFactories;
|
|
|
86
99
|
box.host.refer(unit);
|
|
87
100
|
})
|
|
88
101
|
};
|
|
102
|
+
EffectFactories.Crusher = {
|
|
103
|
+
defaultName: "Crusher",
|
|
104
|
+
defaultIcon: IconSymbol.Bug,
|
|
105
|
+
description: "Degrates the audio signal",
|
|
106
|
+
separatorBefore: false,
|
|
107
|
+
type: "audio",
|
|
108
|
+
create: ({ boxGraph }, unit, index) => CrusherDeviceBox.create(boxGraph, UUID.generate(), box => {
|
|
109
|
+
box.label.setValue("Crusher");
|
|
110
|
+
box.index.setValue(index);
|
|
111
|
+
box.host.refer(unit);
|
|
112
|
+
})
|
|
113
|
+
};
|
|
89
114
|
EffectFactories.Revamp = {
|
|
90
115
|
defaultName: "Revamp",
|
|
91
116
|
defaultIcon: IconSymbol.EQ,
|
|
@@ -93,27 +118,7 @@ export var EffectFactories;
|
|
|
93
118
|
separatorBefore: false,
|
|
94
119
|
type: "audio",
|
|
95
120
|
create: ({ boxGraph }, unit, index) => RevampDeviceBox.create(boxGraph, UUID.generate(), box => {
|
|
96
|
-
|
|
97
|
-
box.highPass.frequency.setInitValue(40.0);
|
|
98
|
-
box.highPass.order.setInitValue(2);
|
|
99
|
-
box.highPass.q.setInitValue(INVERSE_SQRT_2);
|
|
100
|
-
box.highPass.enabled.setInitValue(true);
|
|
101
|
-
box.lowShelf.frequency.setInitValue(80.0);
|
|
102
|
-
box.lowShelf.gain.setInitValue(6);
|
|
103
|
-
box.lowBell.frequency.setInitValue(120.0);
|
|
104
|
-
box.lowBell.gain.setInitValue(6);
|
|
105
|
-
box.lowBell.q.setInitValue(INVERSE_SQRT_2);
|
|
106
|
-
box.midBell.frequency.setInitValue(640.0);
|
|
107
|
-
box.midBell.q.setInitValue(INVERSE_SQRT_2);
|
|
108
|
-
box.midBell.gain.setInitValue(6);
|
|
109
|
-
box.highBell.frequency.setInitValue(3600.0);
|
|
110
|
-
box.highBell.q.setInitValue(INVERSE_SQRT_2);
|
|
111
|
-
box.highBell.gain.setInitValue(6);
|
|
112
|
-
box.highShelf.frequency.setInitValue(10000.0);
|
|
113
|
-
box.highShelf.gain.setInitValue(6);
|
|
114
|
-
box.lowPass.frequency.setInitValue(15000.0);
|
|
115
|
-
box.lowPass.order.setInitValue(2);
|
|
116
|
-
box.lowPass.q.setInitValue(INVERSE_SQRT_2);
|
|
121
|
+
EffectParameterDefaults.defaultRevampDeviceBox(box);
|
|
117
122
|
box.index.setValue(index);
|
|
118
123
|
box.host.refer(unit);
|
|
119
124
|
})
|
|
@@ -156,7 +161,7 @@ export var EffectFactories;
|
|
|
156
161
|
}
|
|
157
162
|
};
|
|
158
163
|
EffectFactories.MidiNamed = { Arpeggio: EffectFactories.Arpeggio, Pitch: EffectFactories.Pitch, Zeitgeist: EffectFactories.Zeitgeist };
|
|
159
|
-
EffectFactories.AudioNamed = { StereoTool: EffectFactories.StereoTool, Delay: EffectFactories.Delay, Reverb: EffectFactories.Reverb, Revamp: EffectFactories.Revamp, Modular: EffectFactories.Modular };
|
|
164
|
+
EffectFactories.AudioNamed = { StereoTool: EffectFactories.StereoTool, Compressor: EffectFactories.Compressor, Delay: EffectFactories.Delay, Reverb: EffectFactories.Reverb, Revamp: EffectFactories.Revamp, Crusher: EffectFactories.Crusher, Modular: EffectFactories.Modular };
|
|
160
165
|
EffectFactories.MidiList = Object.values(EffectFactories.MidiNamed);
|
|
161
166
|
EffectFactories.AudioList = Object.values(EffectFactories.AudioNamed);
|
|
162
167
|
EffectFactories.MergedNamed = { ...EffectFactories.MidiNamed, ...EffectFactories.AudioNamed };
|
package/dist/EffectFactory.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { EffectPointerType, IconSymbol } from "@opendaw/studio-adapters";
|
|
2
2
|
import { Field } from "@opendaw/lib-box";
|
|
3
3
|
import { int } from "@opendaw/lib-std";
|
|
4
|
-
import { Project } from "./project
|
|
4
|
+
import { Project } from "./project";
|
|
5
5
|
import { EffectBox } from "./EffectBox";
|
|
6
6
|
export interface EffectFactory {
|
|
7
7
|
get defaultName(): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EffectFactory.d.ts","sourceRoot":"","sources":["../src/EffectFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,iBAAiB,EAAE,UAAU,EAAC,MAAM,0BAA0B,CAAA;AACtE,OAAO,EAAC,KAAK,EAAC,MAAM,kBAAkB,CAAA;AACtC,OAAO,EAAC,GAAG,EAAC,MAAM,kBAAkB,CAAA;AACpC,OAAO,EAAC,OAAO,EAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"EffectFactory.d.ts","sourceRoot":"","sources":["../src/EffectFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,iBAAiB,EAAE,UAAU,EAAC,MAAM,0BAA0B,CAAA;AACtE,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,aAAa;IAC1B,IAAI,WAAW,IAAI,MAAM,CAAA;IACzB,IAAI,WAAW,IAAI,UAAU,CAAA;IAC7B,IAAI,WAAW,IAAI,MAAM,CAAA;IACzB,IAAI,eAAe,IAAI,OAAO,CAAA;IAC9B,IAAI,IAAI,IAAI,OAAO,GAAG,MAAM,CAAA;IAE5B,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,iBAAiB,CAAC,EAAE,KAAK,EAAE,GAAG,GAAG,SAAS,CAAA;CAClF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EffectParameterDefaults.d.ts","sourceRoot":"","sources":["../src/EffectParameterDefaults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,uBAAuB,CAAA;AAGrD,yBAAiB,uBAAuB,CAAC;IAC9B,MAAM,sBAAsB,GAAI,KAAK,eAAe,SAsB1D,CAAA;CACJ"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { INVERSE_SQRT_2 } from "@opendaw/lib-std";
|
|
2
|
+
export var EffectParameterDefaults;
|
|
3
|
+
(function (EffectParameterDefaults) {
|
|
4
|
+
EffectParameterDefaults.defaultRevampDeviceBox = (box) => {
|
|
5
|
+
box.label.setValue("Revamp");
|
|
6
|
+
box.highPass.frequency.setInitValue(40.0);
|
|
7
|
+
box.highPass.order.setInitValue(1);
|
|
8
|
+
box.highPass.q.setInitValue(Math.SQRT1_2);
|
|
9
|
+
box.highPass.enabled.setInitValue(true);
|
|
10
|
+
box.lowShelf.frequency.setInitValue(80.0);
|
|
11
|
+
box.lowShelf.gain.setInitValue(6);
|
|
12
|
+
box.lowBell.frequency.setInitValue(120.0);
|
|
13
|
+
box.lowBell.gain.setInitValue(6);
|
|
14
|
+
box.lowBell.q.setInitValue(INVERSE_SQRT_2);
|
|
15
|
+
box.midBell.frequency.setInitValue(640.0);
|
|
16
|
+
box.midBell.q.setInitValue(INVERSE_SQRT_2);
|
|
17
|
+
box.midBell.gain.setInitValue(6);
|
|
18
|
+
box.highBell.frequency.setInitValue(3600.0);
|
|
19
|
+
box.highBell.q.setInitValue(INVERSE_SQRT_2);
|
|
20
|
+
box.highBell.gain.setInitValue(6);
|
|
21
|
+
box.highShelf.frequency.setInitValue(10000.0);
|
|
22
|
+
box.highShelf.gain.setInitValue(6);
|
|
23
|
+
box.lowPass.frequency.setInitValue(15000.0);
|
|
24
|
+
box.lowPass.order.setInitValue(1);
|
|
25
|
+
box.lowPass.q.setInitValue(Math.SQRT1_2);
|
|
26
|
+
};
|
|
27
|
+
})(EffectParameterDefaults || (EffectParameterDefaults = {}));
|
package/dist/Engine.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ export interface Engine extends Terminable {
|
|
|
6
6
|
play(): void;
|
|
7
7
|
stop(): void;
|
|
8
8
|
setPosition(position: ppqn): void;
|
|
9
|
-
|
|
9
|
+
prepareRecordingState(countIn: boolean): void;
|
|
10
10
|
stopRecording(): void;
|
|
11
11
|
isReady(): Promise<void>;
|
|
12
12
|
queryLoadingComplete(): Promise<boolean>;
|
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,
|
|
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,iBAAiB,IAAI,eAAe,CAAC,GAAG,CAAC,CAAA;IAC7C,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
|
@@ -13,7 +13,7 @@ export declare class EngineFacade implements Engine {
|
|
|
13
13
|
play(): void;
|
|
14
14
|
stop(reset?: boolean): void;
|
|
15
15
|
setPosition(position: ppqn): void;
|
|
16
|
-
|
|
16
|
+
prepareRecordingState(countIn: boolean): void;
|
|
17
17
|
stopRecording(): void;
|
|
18
18
|
get position(): ObservableValue<ppqn>;
|
|
19
19
|
get isPlaying(): ObservableValue<boolean>;
|
|
@@ -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,mBAAmB,CAAA;AAEzC,qBAAa,YAAa,YAAW,MAAM;;;IAmBvC,UAAU,CAAC,OAAO,EAAE,aAAa;IAmBjC,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,
|
|
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,mBAAmB,CAAA;AAEzC,qBAAa,YAAa,YAAW,MAAM;;;IAmBvC,UAAU,CAAC,OAAO,EAAE,aAAa;IAmBjC,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,iBAAiB,IAAI,eAAe,CAAC,GAAG,CAAC,CAAiC;IAC9E,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
|
@@ -28,7 +28,7 @@ export class EngineFacade {
|
|
|
28
28
|
play() { this.#worklet.ifSome(worklet => worklet.play()); }
|
|
29
29
|
stop(reset = false) { this.#worklet.ifSome(worklet => worklet.stop(reset)); }
|
|
30
30
|
setPosition(position) { this.#worklet.ifSome(worklet => worklet.setPosition(position)); }
|
|
31
|
-
|
|
31
|
+
prepareRecordingState(countIn) { this.#worklet.ifSome(worklet => worklet.prepareRecordingState(countIn)); }
|
|
32
32
|
stopRecording() { this.#worklet.ifSome(worklet => worklet.stopRecording()); }
|
|
33
33
|
get position() { return this.#position; }
|
|
34
34
|
get isPlaying() { return this.#isPlaying; }
|
package/dist/EngineWorklet.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { int, MutableObservableValue, Nullable, ObservableValue, Observer, Subscription, UUID } from "@opendaw/lib-std";
|
|
2
2
|
import { ppqn } from "@opendaw/lib-dsp";
|
|
3
3
|
import { ClipNotification, ExportStemsConfiguration, NoteSignal, ProcessorOptions } from "@opendaw/studio-adapters";
|
|
4
|
-
import { Project } from "./project/Project";
|
|
5
4
|
import { Engine } from "./Engine";
|
|
5
|
+
import { Project } from "./project";
|
|
6
6
|
export declare class EngineWorklet extends AudioWorkletNode implements Engine {
|
|
7
7
|
#private;
|
|
8
8
|
static ID: int;
|
|
@@ -11,7 +11,7 @@ export declare class EngineWorklet extends AudioWorkletNode implements Engine {
|
|
|
11
11
|
play(): void;
|
|
12
12
|
stop(reset?: boolean): void;
|
|
13
13
|
setPosition(position: ppqn): void;
|
|
14
|
-
|
|
14
|
+
prepareRecordingState(countIn: boolean): void;
|
|
15
15
|
stopRecording(): void;
|
|
16
16
|
panic(): void;
|
|
17
17
|
get isPlaying(): ObservableValue<boolean>;
|
|
@@ -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,
|
|
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;IAuHtC,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,iBAAiB,IAAI,eAAe,CAAC,GAAG,CAAC,CAAiC;IAC9E,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
|
@@ -56,7 +56,7 @@ export class EngineWorklet extends AudioWorkletNode {
|
|
|
56
56
|
play() { dispatcher.dispatchAndForget(this.play); }
|
|
57
57
|
stop(reset) { dispatcher.dispatchAndForget(this.stop, reset); }
|
|
58
58
|
setPosition(position) { dispatcher.dispatchAndForget(this.setPosition, position); }
|
|
59
|
-
|
|
59
|
+
prepareRecordingState(countIn) { dispatcher.dispatchAndForget(this.prepareRecordingState, countIn); }
|
|
60
60
|
stopRecording() { dispatcher.dispatchAndForget(this.stopRecording); }
|
|
61
61
|
setMetronomeEnabled(enabled) {
|
|
62
62
|
dispatcher.dispatchAndForget(this.setMetronomeEnabled, enabled);
|
|
@@ -82,6 +82,7 @@ export class EngineWorklet extends AudioWorkletNode {
|
|
|
82
82
|
}));
|
|
83
83
|
Communicator.executor(messenger.channel("engine-to-client"), {
|
|
84
84
|
log: (message) => console.log("WORKLET", message),
|
|
85
|
+
error: (reason) => this.dispatchEvent(new ErrorEvent("error", { error: reason })),
|
|
85
86
|
ready: () => resolve(),
|
|
86
87
|
fetchAudio: (uuid) => {
|
|
87
88
|
return new Promise((resolve, reject) => {
|
|
@@ -132,7 +133,7 @@ export class EngineWorklet extends AudioWorkletNode {
|
|
|
132
133
|
play() { this.#commands.play(); }
|
|
133
134
|
stop(reset = false) { this.#commands.stop(reset); }
|
|
134
135
|
setPosition(position) { this.#commands.setPosition(position); }
|
|
135
|
-
|
|
136
|
+
prepareRecordingState(countIn) { this.#commands.prepareRecordingState(countIn); }
|
|
136
137
|
stopRecording() { this.#commands.stopRecording(); }
|
|
137
138
|
panic() { this.#commands.panic(); }
|
|
138
139
|
get isPlaying() { return this.#isPlaying; }
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { Observer, Subscription } from "@opendaw/lib-std";
|
|
3
|
+
declare const PreferencesSchema: z.ZodObject<{
|
|
4
|
+
"auto-open-clips": z.ZodDefault<z.ZodBoolean>;
|
|
5
|
+
"auto-create-output-compressor": z.ZodDefault<z.ZodBoolean>;
|
|
6
|
+
"footer-show-fps-meter": z.ZodDefault<z.ZodBoolean>;
|
|
7
|
+
"footer-show-build-infos": z.ZodDefault<z.ZodBoolean>;
|
|
8
|
+
}, z.core.$strip>;
|
|
9
|
+
export type Preferences = z.infer<typeof PreferencesSchema>;
|
|
10
|
+
export declare const Preferences: {
|
|
11
|
+
values: {
|
|
12
|
+
"auto-open-clips": boolean;
|
|
13
|
+
"auto-create-output-compressor": boolean;
|
|
14
|
+
"footer-show-fps-meter": boolean;
|
|
15
|
+
"footer-show-build-infos": boolean;
|
|
16
|
+
};
|
|
17
|
+
catchupAndSubscribe: <KEY extends keyof Preferences>(observer: Observer<Preferences[KEY]>, property: KEY) => Subscription;
|
|
18
|
+
};
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=Preferences.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Preferences.d.ts","sourceRoot":"","sources":["../src/Preferences.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAA;AACrB,OAAO,EAAsB,QAAQ,EAAE,YAAY,EAAW,MAAM,kBAAkB,CAAA;AAEtF,QAAA,MAAM,iBAAiB;;;;;iBAKrB,CAAA;AAEF,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAE3D,eAAO,MAAM,WAAW;;;;;;;0BAkCM,GAAG,SAAS,MAAM,WAAW,YACrC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,YAAY,GAAG,KAAG,YAAY;CAK1E,CAAA"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { isDefined, Notifier, tryCatch } from "@opendaw/lib-std";
|
|
3
|
+
const PreferencesSchema = z.object({
|
|
4
|
+
"auto-open-clips": z.boolean().default(false),
|
|
5
|
+
"auto-create-output-compressor": z.boolean().default(true),
|
|
6
|
+
"footer-show-fps-meter": z.boolean().default(false),
|
|
7
|
+
"footer-show-build-infos": z.boolean().default(false)
|
|
8
|
+
});
|
|
9
|
+
export const Preferences = (() => {
|
|
10
|
+
const STORAGE_KEY = "preferences";
|
|
11
|
+
const notifier = new Notifier();
|
|
12
|
+
const watch = (target) => new Proxy(target, {
|
|
13
|
+
set(obj, prop, value) {
|
|
14
|
+
const key = prop;
|
|
15
|
+
console.debug(`preference changed. key: ${key}, value: ${value}`);
|
|
16
|
+
obj[key] = value;
|
|
17
|
+
notifier.notify(key);
|
|
18
|
+
tryCatch(() => localStorage.setItem(STORAGE_KEY, JSON.stringify(target)));
|
|
19
|
+
return true;
|
|
20
|
+
},
|
|
21
|
+
preventExtensions() {
|
|
22
|
+
// Prevent the proxy target from being made non-extensible
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
const getOrCreate = () => {
|
|
27
|
+
const stored = localStorage.getItem(STORAGE_KEY);
|
|
28
|
+
if (isDefined(stored)) {
|
|
29
|
+
const { status, value } = tryCatch(() => JSON.parse(stored));
|
|
30
|
+
if (status === "success") {
|
|
31
|
+
return watch({ ...PreferencesSchema.parse(value) });
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return watch({ ...PreferencesSchema.parse({}) });
|
|
35
|
+
};
|
|
36
|
+
const preferences = getOrCreate();
|
|
37
|
+
return {
|
|
38
|
+
values: preferences,
|
|
39
|
+
catchupAndSubscribe: (observer, property) => {
|
|
40
|
+
observer(preferences[property]);
|
|
41
|
+
return notifier.subscribe(key => { if (key === property) {
|
|
42
|
+
observer(preferences[property]);
|
|
43
|
+
} });
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
})();
|
|
@@ -9,8 +9,8 @@ export class CaptureDevices {
|
|
|
9
9
|
constructor(project) {
|
|
10
10
|
this.#project = project;
|
|
11
11
|
this.#captures = UUID.newSet(unit => unit.uuid);
|
|
12
|
-
this.#subscription = this.#project.rootBox.audioUnits.pointerHub.
|
|
13
|
-
|
|
12
|
+
this.#subscription = this.#project.rootBox.audioUnits.pointerHub.catchupAndSubscribe({
|
|
13
|
+
onAdded: ({ box }) => {
|
|
14
14
|
const audioUnitBox = asInstanceOf(box, AudioUnitBox);
|
|
15
15
|
const capture = audioUnitBox.capture.targetVertex
|
|
16
16
|
.ifSome(({ box }) => box.accept({
|
|
@@ -21,7 +21,7 @@ export class CaptureDevices {
|
|
|
21
21
|
this.#captures.add(capture);
|
|
22
22
|
}
|
|
23
23
|
},
|
|
24
|
-
|
|
24
|
+
onRemoved: ({ box: { address: { uuid } } }) => this.#captures.removeByKeyIfExist(uuid)?.terminate()
|
|
25
25
|
});
|
|
26
26
|
}
|
|
27
27
|
get project() { return this.#project; }
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { AudioUnitBox, TrackBox } from "@opendaw/studio-boxes";
|
|
2
2
|
import { TrackType } from "@opendaw/studio-adapters";
|
|
3
|
-
import {
|
|
3
|
+
import { BoxEditing } from "@opendaw/lib-box";
|
|
4
4
|
export declare namespace RecordTrack {
|
|
5
|
-
const findOrCreate: (editing:
|
|
5
|
+
const findOrCreate: (editing: BoxEditing, audioUnitBox: AudioUnitBox, type: TrackType) => TrackBox;
|
|
6
6
|
}
|
|
7
7
|
//# sourceMappingURL=RecordTrack.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RecordTrack.d.ts","sourceRoot":"","sources":["../../src/capture/RecordTrack.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAE,QAAQ,EAAC,MAAM,uBAAuB,CAAA;AAE5D,OAAO,EAAC,SAAS,EAAC,MAAM,0BAA0B,CAAA;AAClD,OAAO,EAAC,
|
|
1
|
+
{"version":3,"file":"RecordTrack.d.ts","sourceRoot":"","sources":["../../src/capture/RecordTrack.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAE,QAAQ,EAAC,MAAM,uBAAuB,CAAA;AAE5D,OAAO,EAAC,SAAS,EAAC,MAAM,0BAA0B,CAAA;AAClD,OAAO,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAA;AAE3C,yBAAiB,WAAW,CAAC;IAClB,MAAM,YAAY,GAAI,SAAS,UAAU,EAAE,cAAc,YAAY,EAAE,MAAM,SAAS,KAAG,QAe/F,CAAA;CACJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Recording.d.ts","sourceRoot":"","sources":["../../src/capture/Recording.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuC,UAAU,EAAa,MAAM,kBAAkB,CAAA;AAK7F,OAAO,EAAC,OAAO,EAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"Recording.d.ts","sourceRoot":"","sources":["../../src/capture/Recording.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuC,UAAU,EAAa,MAAM,kBAAkB,CAAA;AAK7F,OAAO,EAAC,OAAO,EAAC,MAAM,YAAY,CAAA;AAElC,qBAAa,SAAS;;IAClB,MAAM,KAAK,WAAW,IAAI,OAAO,CAA2B;WAE/C,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IA6D3E,OAAO;CACV"}
|
|
@@ -25,7 +25,7 @@ export class Recording {
|
|
|
25
25
|
return Errors.warn(String(error));
|
|
26
26
|
}
|
|
27
27
|
terminator.ownAll(...captures.map(capture => capture.startRecording()));
|
|
28
|
-
engine.
|
|
28
|
+
engine.prepareRecordingState(countIn);
|
|
29
29
|
const { isRecording, isCountingIn } = engine;
|
|
30
30
|
const stop = () => {
|
|
31
31
|
if (isRecording.getValue() || isCountingIn.getValue()) {
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
import { CloudService } from "./CloudService";
|
|
2
2
|
import { CloudHandler } from "./CloudHandler";
|
|
3
|
+
type ClientIds = {
|
|
4
|
+
Dropbox: string;
|
|
5
|
+
GoogleDrive: string;
|
|
6
|
+
};
|
|
3
7
|
export declare class CloudAuthManager {
|
|
4
8
|
#private;
|
|
5
|
-
static create(): CloudAuthManager;
|
|
6
|
-
readonly id: number;
|
|
9
|
+
static create(clientIds: ClientIds): CloudAuthManager;
|
|
7
10
|
private constructor();
|
|
8
11
|
getHandler(service: CloudService): Promise<CloudHandler>;
|
|
9
12
|
}
|
|
13
|
+
export {};
|
|
10
14
|
//# sourceMappingURL=CloudAuthManager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CloudAuthManager.d.ts","sourceRoot":"","sources":["../../src/cloud/CloudAuthManager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"CloudAuthManager.d.ts","sourceRoot":"","sources":["../../src/cloud/CloudAuthManager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAA;AAI3C,KAAK,SAAS,GAAG;IACb,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,qBAAa,gBAAgB;;IACzB,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,GAAG,gBAAgB;IAuBrD,OAAO;IAED,UAAU,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;CAwLjE"}
|