@opendaw/studio-core 0.0.26 → 0.0.28
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 +7 -3
- package/dist/Engine.d.ts +4 -4
- package/dist/Engine.d.ts.map +1 -1
- package/dist/EngineFacade.d.ts +4 -4
- package/dist/EngineFacade.d.ts.map +1 -1
- package/dist/EngineWorklet.d.ts +4 -4
- package/dist/EngineWorklet.d.ts.map +1 -1
- package/dist/RecordingWorklet.d.ts +1 -1
- package/dist/RecordingWorklet.d.ts.map +1 -1
- package/dist/RecordingWorklet.js +1 -1
- package/dist/WavFile.d.ts +10 -0
- package/dist/WavFile.d.ts.map +1 -0
- package/dist/WavFile.js +94 -0
- package/dist/WorkerAgents.d.ts +1 -1
- package/dist/WorkerAgents.d.ts.map +1 -1
- package/dist/WorkerAgents.js +15 -3
- package/dist/capture/Capture.d.ts +1 -1
- package/dist/capture/Capture.d.ts.map +1 -1
- package/dist/capture/CaptureAudio.js +1 -1
- package/dist/capture/CaptureDevices.d.ts +1 -1
- package/dist/capture/CaptureDevices.d.ts.map +1 -1
- package/dist/capture/CaptureMidi.js +1 -1
- package/dist/clouds/CloudAuthManager.d.ts +10 -0
- package/dist/clouds/CloudAuthManager.d.ts.map +1 -0
- package/dist/clouds/CloudAuthManager.js +195 -0
- package/dist/clouds/CloudBackup.d.ts +8 -0
- package/dist/clouds/CloudBackup.d.ts.map +1 -0
- package/dist/clouds/CloudBackup.js +55 -0
- package/dist/clouds/CloudBackupProjects.d.ts +10 -0
- package/dist/clouds/CloudBackupProjects.d.ts.map +1 -0
- package/dist/clouds/CloudBackupProjects.js +167 -0
- package/dist/clouds/CloudBackupSamples.d.ts +13 -0
- package/dist/clouds/CloudBackupSamples.d.ts.map +1 -0
- package/dist/clouds/CloudBackupSamples.js +129 -0
- package/dist/clouds/CloudHandler.d.ts +9 -0
- package/dist/clouds/CloudHandler.d.ts.map +1 -0
- package/dist/clouds/CloudHandler.js +1 -0
- package/dist/clouds/CloudService.d.ts +2 -0
- package/dist/clouds/CloudService.d.ts.map +1 -0
- package/dist/clouds/CloudService.js +1 -0
- package/dist/clouds/DropboxHandler.d.ts +12 -0
- package/dist/clouds/DropboxHandler.d.ts.map +1 -0
- package/dist/clouds/DropboxHandler.js +83 -0
- package/dist/clouds/GoogleDriveHandler.d.ts +12 -0
- package/dist/clouds/GoogleDriveHandler.d.ts.map +1 -0
- package/dist/clouds/GoogleDriveHandler.js +256 -0
- package/dist/dawproject/DawProject.d.ts +2 -2
- package/dist/dawproject/DawProject.d.ts.map +1 -1
- package/dist/dawproject/DawProjectExporter.js +2 -2
- package/dist/dawproject/DawProjectImport.d.ts +1 -1
- package/dist/dawproject/DawProjectImport.d.ts.map +1 -1
- package/dist/dawproject/DeviceIO.d.ts +1 -1
- package/dist/dawproject/DeviceIO.d.ts.map +1 -1
- package/dist/dawproject/DeviceIO.js +2 -1
- package/dist/index.d.ts +6 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -1
- package/dist/processors.js +3 -3
- package/dist/processors.js.map +4 -4
- package/dist/project/Project.d.ts +1 -7
- package/dist/project/Project.d.ts.map +1 -1
- package/dist/project/Project.js +7 -12
- package/dist/project/ProjectApi.d.ts +9 -1
- package/dist/project/ProjectApi.d.ts.map +1 -1
- package/dist/project/ProjectApi.js +67 -3
- package/dist/project/ProjectBundle.d.ts +1 -1
- package/dist/project/ProjectBundle.d.ts.map +1 -1
- package/dist/project/ProjectBundle.js +1 -1
- package/dist/project/ProjectPaths.d.ts +4 -4
- package/dist/project/ProjectPaths.d.ts.map +1 -1
- package/dist/project/ProjectProfile.d.ts +2 -2
- package/dist/project/ProjectProfile.d.ts.map +1 -1
- package/dist/project/ProjectSignals.d.ts +6 -0
- package/dist/project/ProjectSignals.d.ts.map +1 -0
- package/dist/project/ProjectSignals.js +4 -0
- package/dist/project/ProjectStorage.d.ts +23 -0
- package/dist/project/ProjectStorage.d.ts.map +1 -0
- package/dist/project/ProjectStorage.js +59 -0
- package/dist/samples/MainThreadSampleLoader.d.ts +2 -2
- package/dist/samples/MainThreadSampleLoader.d.ts.map +1 -1
- package/dist/samples/MainThreadSampleLoader.js +2 -3
- package/dist/samples/MainThreadSampleManager.d.ts +4 -4
- package/dist/samples/MainThreadSampleManager.d.ts.map +1 -1
- package/dist/samples/OpenSampleAPI.d.ts +4 -2
- package/dist/samples/OpenSampleAPI.d.ts.map +1 -1
- package/dist/samples/OpenSampleAPI.js +19 -2
- package/dist/samples/SampleAPI.d.ts +2 -2
- package/dist/samples/SampleAPI.d.ts.map +1 -1
- package/dist/samples/SampleImporter.d.ts +1 -1
- package/dist/samples/SampleImporter.d.ts.map +1 -1
- package/dist/samples/SampleProvider.d.ts +1 -1
- package/dist/samples/SampleProvider.d.ts.map +1 -1
- package/dist/samples/SampleStorage.d.ts +7 -5
- package/dist/samples/SampleStorage.d.ts.map +1 -1
- package/dist/samples/SampleStorage.js +31 -17
- package/dist/workers.js +2 -2
- package/dist/workers.js.map +4 -4
- package/package.json +14 -14
- package/dist/Wav.d.ts +0 -6
- package/dist/Wav.d.ts.map +0 -1
- package/dist/Wav.js +0 -46
@@ -9,9 +9,7 @@ import { ProjectApi } from "./ProjectApi";
|
|
9
9
|
import { CaptureDevices } from "../capture/CaptureDevices";
|
10
10
|
import { EngineFacade } from "../EngineFacade";
|
11
11
|
import { EngineWorklet } from "../EngineWorklet";
|
12
|
-
import { AudioWorklets } from "../AudioWorklets";
|
13
12
|
import { MIDILearning } from "../midi/MIDILearning";
|
14
|
-
import { ppqn } from "@opendaw/lib-dsp";
|
15
13
|
export type RestartWorklet = {
|
16
14
|
unload: Procedure<unknown>;
|
17
15
|
load: Procedure<EngineWorklet>;
|
@@ -39,7 +37,7 @@ export declare class Project implements BoxAdaptersContext, Terminable, Terminab
|
|
39
37
|
readonly mixer: Mixer;
|
40
38
|
readonly engine: EngineFacade;
|
41
39
|
private constructor();
|
42
|
-
startAudioWorklet(
|
40
|
+
startAudioWorklet(restart?: RestartWorklet): EngineWorklet;
|
43
41
|
startRecording(countIn?: boolean): void;
|
44
42
|
own<T extends Terminable>(terminable: T): T;
|
45
43
|
ownAll<T extends Terminable>(...terminables: Array<T>): void;
|
@@ -54,10 +52,6 @@ export declare class Project implements BoxAdaptersContext, Terminable, Terminab
|
|
54
52
|
get isMainThread(): boolean;
|
55
53
|
get liveStreamBroadcaster(): LiveStreamBroadcaster;
|
56
54
|
get skeleton(): ProjectDecoder.Skeleton;
|
57
|
-
merge(options: {
|
58
|
-
insert: ppqn;
|
59
|
-
}, ...projects: ReadonlyArray<Project>): Promise<Project>;
|
60
|
-
extractIntoNew(): Promise<Project>;
|
61
55
|
toArrayBuffer(): ArrayBufferLike;
|
62
56
|
copy(): Project;
|
63
57
|
terminate(): void;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Project.d.ts","sourceRoot":"","sources":["../../src/project/Project.ts"],"names":[],"mappings":"AAAA,OAAO,EAIH,SAAS,EAET,UAAU,EACV,eAAe,EACf,UAAU,EAEb,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAC,QAAQ,EAAE,OAAO,EAAC,MAAM,kBAAkB,CAAA;AAClD,OAAO,EACH,WAAW,EACX,YAAY,EACZ,KAAK,EAEL,OAAO,EACP,WAAW,EACX,gBAAgB,EACnB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACH,WAAW,EACX,kBAAkB,EAClB,cAAc,EAGd,sBAAsB,EACtB,cAAc,EACd,cAAc,EACd,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EAClB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAC,qBAAqB,EAAE,kBAAkB,EAAC,MAAM,qBAAqB,CAAA;AAE7E,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAA;AACvC,OAAO,EAAC,KAAK,EAAC,MAAM,UAAU,CAAA;AAC9B,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAA;AAEvC,OAAO,EAAC,cAAc,EAAC,MAAM,2BAA2B,CAAA;AACxD,OAAO,EAAC,YAAY,EAAC,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAC,aAAa,EAAC,MAAM,kBAAkB,CAAA;
|
1
|
+
{"version":3,"file":"Project.d.ts","sourceRoot":"","sources":["../../src/project/Project.ts"],"names":[],"mappings":"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"}
|
package/dist/project/Project.js
CHANGED
@@ -101,10 +101,10 @@ export class Project {
|
|
101
101
|
this.mixer = new Mixer(this.rootBoxAdapter.audioUnits);
|
102
102
|
console.debug(`Project was created on ${this.rootBoxAdapter.created.toString()}`);
|
103
103
|
}
|
104
|
-
startAudioWorklet(
|
104
|
+
startAudioWorklet(restart) {
|
105
105
|
console.debug(`start AudioWorklet`);
|
106
106
|
const lifecycle = this.#terminator.spawn();
|
107
|
-
const engine = lifecycle.own(
|
107
|
+
const engine = lifecycle.own(this.#env.audioWorklets.createEngine(this));
|
108
108
|
const handler = async (event) => {
|
109
109
|
console.warn(event);
|
110
110
|
// we will only accept the first error
|
@@ -112,7 +112,7 @@ export class Project {
|
|
112
112
|
engine.removeEventListener("processorerror", handler);
|
113
113
|
safeExecute(restart?.unload, event);
|
114
114
|
lifecycle.terminate();
|
115
|
-
safeExecute(restart?.load, this.startAudioWorklet(
|
115
|
+
safeExecute(restart?.load, this.startAudioWorklet(restart));
|
116
116
|
};
|
117
117
|
engine.addEventListener("error", handler);
|
118
118
|
engine.addEventListener("processorerror", handler);
|
@@ -151,14 +151,6 @@ export class Project {
|
|
151
151
|
}
|
152
152
|
};
|
153
153
|
}
|
154
|
-
merge(options, ...projects) {
|
155
|
-
// TODO
|
156
|
-
return Promise.reject("Not implemented");
|
157
|
-
}
|
158
|
-
extractIntoNew( /*Something ;)*/) {
|
159
|
-
// TODO
|
160
|
-
return Promise.reject("Not implemented");
|
161
|
-
}
|
162
154
|
toArrayBuffer() {
|
163
155
|
const output = ByteArrayOutput.create();
|
164
156
|
output.writeInt(ProjectDecoder.MAGIC_HEADER_OPEN);
|
@@ -176,5 +168,8 @@ export class Project {
|
|
176
168
|
return output.toArrayBuffer();
|
177
169
|
}
|
178
170
|
copy() { return Project.load(this.#env, this.toArrayBuffer()); }
|
179
|
-
terminate() {
|
171
|
+
terminate() {
|
172
|
+
console.debug("Project terminated");
|
173
|
+
this.#terminator.terminate();
|
174
|
+
}
|
180
175
|
}
|
@@ -3,7 +3,7 @@ import { ppqn } from "@opendaw/lib-dsp";
|
|
3
3
|
import { Field, PointerField } from "@opendaw/lib-box";
|
4
4
|
import { AudioUnitType, Pointers } from "@opendaw/studio-enums";
|
5
5
|
import { AudioBusBox, AudioUnitBox, NoteEventBox, NoteEventCollectionBox, NoteRegionBox, TrackBox, ValueRegionBox } from "@opendaw/studio-boxes";
|
6
|
-
import { AnyClipBox, AudioUnitBoxAdapter, EffectPointerType, IconSymbol, IndexedAdapterCollectionListener } from "@opendaw/studio-adapters";
|
6
|
+
import { AnyClipBox, AnyRegionBox, AudioUnitBoxAdapter, EffectPointerType, IconSymbol, IndexedAdapterCollectionListener } from "@opendaw/studio-adapters";
|
7
7
|
import { Project } from "./Project";
|
8
8
|
import { InstrumentFactory } from "../InstrumentFactory";
|
9
9
|
import { InstrumentProduct } from "../InstrumentProduct";
|
@@ -54,5 +54,13 @@ export declare class ProjectApi {
|
|
54
54
|
createTrackRegion(trackBox: TrackBox, position: ppqn, duration: ppqn, { name, hue }?: ClipRegionOptions): Option<NoteRegionBox> | Option<ValueRegionBox>;
|
55
55
|
createNoteEvent({ owner, position, duration, velocity, pitch, chance, cent }: NoteEventParams): NoteEventBox;
|
56
56
|
deleteAudioUnit(audioUnitBox: AudioUnitBox): void;
|
57
|
+
extractIntoNew(audioUnits: ReadonlyArray<AudioUnitBox>, option?: {
|
58
|
+
includeAux?: boolean;
|
59
|
+
includeBus?: boolean;
|
60
|
+
}): Project;
|
61
|
+
mergeInto(...sources: ReadonlyArray<{
|
62
|
+
source: Project | AnyRegionBox;
|
63
|
+
insertAt: ppqn;
|
64
|
+
}>): Promise<void>;
|
57
65
|
}
|
58
66
|
//# sourceMappingURL=ProjectApi.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ProjectApi.d.ts","sourceRoot":"","sources":["../../src/project/ProjectApi.ts"],"names":[],"mappings":"AAAA,OAAO,
|
1
|
+
{"version":3,"file":"ProjectApi.d.ts","sourceRoot":"","sources":["../../src/project/ProjectApi.ts"],"names":[],"mappings":"AAAA,OAAO,EAOH,KAAK,EACL,GAAG,EACH,QAAQ,EACR,MAAM,EAEN,YAAY,EAEf,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAC,IAAI,EAAO,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAyB,KAAK,EAAc,YAAY,EAAc,MAAM,kBAAkB,CAAA;AACrG,OAAO,EAAC,aAAa,EAAE,QAAQ,EAAC,MAAM,uBAAuB,CAAA;AAC7D,OAAO,EACH,WAAW,EAEX,YAAY,EAMZ,YAAY,EACZ,sBAAsB,EACtB,aAAa,EAEb,QAAQ,EAGR,cAAc,EACjB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACH,UAAU,EACV,YAAY,EACZ,mBAAmB,EAEnB,iBAAiB,EACjB,UAAU,EACV,gCAAgC,EAEnC,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AACjC,OAAO,EAAC,iBAAiB,EAAC,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAC,iBAAiB,EAAC,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAC,iBAAiB,EAAC,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAC,aAAa,EAAC,MAAM,kBAAkB,CAAA;AAE9C,OAAO,EAAC,SAAS,EAAC,MAAM,cAAc,CAAA;AAGtC,MAAM,MAAM,iBAAiB,GAAG;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC1B,KAAK,EAAE;QAAE,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAA;KAAE,CAAA;IAC7D,QAAQ,EAAE,IAAI,CAAA;IACd,QAAQ,EAAE,IAAI,CAAA;IACd,KAAK,EAAE,GAAG,CAAA;IACV,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,KAAK,CAAA;IAChB,MAAM,CAAC,EAAE,GAAG,CAAA;CACf,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC3B,QAAQ,EAAE,QAAQ,CAAA;IAClB,QAAQ,EAAE,IAAI,CAAA;IACd,QAAQ,EAAE,IAAI,CAAA;IACd,UAAU,CAAC,EAAE,IAAI,CAAA;IACjB,YAAY,CAAC,EAAE,IAAI,CAAA;IACnB,WAAW,CAAC,EAAE,IAAI,CAAA;IAClB,eAAe,CAAC,EAAE,sBAAsB,CAAA;IACxC,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAGD,qBAAa,UAAU;;gBAGP,OAAO,EAAE,OAAO;IAE5B,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK3B,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,YAAY;IAIhE,6BAA6B,CAAC,QAAQ,EAAE,gCAAgC,CAAC,mBAAmB,CAAC,GAAG,YAAY;IAI5G,gBAAgB,CAAC,EAAC,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAC,EAAE,iBAAiB,EAChE,EAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAC,GAAE,iBAAsB,GAAG,iBAAiB;IAqBhF,cAAc,CAAC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,aAAa,EACnB,KAAK,EAAE,MAAM,GAAG,WAAW;IAsB1C,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,iBAAiB,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,GAAE,GAA6B,GAAG,SAAS;IAI5H,eAAe,CAAC,YAAY,EAAE,YAAY,EAAE,WAAW,GAAE,GAA6B,GAAG,QAAQ;IAIjG,gBAAgB,CAAC,YAAY,EAAE,YAAY,EAAE,WAAW,GAAE,GAA6B,GAAG,QAAQ;IAIlG,qBAAqB,CAAC,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,WAAW,GAAE,GAA6B,GAAG,QAAQ;IAI3I,UAAU,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,EAAC,IAAI,EAAE,GAAG,EAAC,GAAE,iBAAsB,GAAG,MAAM,CAAC,UAAU,CAAC;IAgCvG,gBAAgB,CAAC,EACI,QAAQ,EACR,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,YAAY,EACxB,WAAW,EAAE,eAAe,EAC5B,IAAI,EAAE,IAAI,EAAE,GAAG,EAClB,EAAE,gBAAgB,GAAG,aAAa;IAoBpD,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAC,IAAI,EAAE,GAAG,EAAC,GAAE,iBAAsB;IAkCzG,eAAe,CAAC,EAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAC,EAAE,eAAe,GAAG,YAAY;IAe1G,eAAe,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI;IAOjD,cAAc,CAAC,UAAU,EAAE,aAAa,CAAC,YAAY,CAAC,EACvC,MAAM,GAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,OAAO;IA8DpF,SAAS,CAAC,GAAG,OAAO,EAAE,aAAa,CAAC;QAAE,MAAM,EAAE,OAAO,GAAG,YAAY,CAAC;QAAC,QAAQ,EAAE,IAAI,CAAA;KAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;CAyD1G"}
|
@@ -1,9 +1,10 @@
|
|
1
|
-
import { asDefined, asInstanceOf, assert, clamp, Option, Strings, UUID } from "@opendaw/lib-std";
|
1
|
+
import { Arrays, asDefined, asInstanceOf, assert, ByteArrayInput, clamp, Option, Strings, UUID } from "@opendaw/lib-std";
|
2
2
|
import { PPQN } from "@opendaw/lib-dsp";
|
3
|
-
import { IndexedBox, StringField } from "@opendaw/lib-box";
|
3
|
+
import { IndexedBox, PointerField, StringField } from "@opendaw/lib-box";
|
4
4
|
import { AudioUnitType } from "@opendaw/studio-enums";
|
5
|
-
import { AudioBusBox, AudioUnitBox, CaptureAudioBox, CaptureMidiBox, NoteClipBox, NoteEventBox, NoteEventCollectionBox, NoteRegionBox, TrackBox, ValueClipBox, ValueEventCollectionBox, ValueRegionBox } from "@opendaw/studio-boxes";
|
5
|
+
import { AudioBusBox, AudioFileBox, AudioUnitBox, AuxSendBox, CaptureAudioBox, CaptureMidiBox, NoteClipBox, NoteEventBox, NoteEventCollectionBox, NoteRegionBox, SelectionBox, TrackBox, ValueClipBox, ValueEventCollectionBox, ValueRegionBox } from "@opendaw/studio-boxes";
|
6
6
|
import { IconSymbol, TrackType } from "@opendaw/studio-adapters";
|
7
|
+
import { Project } from "./Project";
|
7
8
|
import { ColorCodes } from "../ColorCodes";
|
8
9
|
import { AudioUnitOrdering } from "../AudioUnitOrdering";
|
9
10
|
// noinspection JSUnusedGlobalSymbols
|
@@ -177,6 +178,69 @@ export class ProjectApi {
|
|
177
178
|
IndexedBox.removeOrder(rootBox.audioUnits, audioUnitBox.index.getValue());
|
178
179
|
audioUnitBox.delete();
|
179
180
|
}
|
181
|
+
// This version ignores selected items, buses and aux-sends. All outputs will be redirected to the primary output.
|
182
|
+
extractIntoNew(audioUnits, option = {}) {
|
183
|
+
console.time("extractIntoNew");
|
184
|
+
assert(Arrays.satisfy(audioUnits, (a, b) => a.graph === b.graph), "AudioUnits must share the same BoxGraph");
|
185
|
+
// TODO Implement include options.
|
186
|
+
assert(!option.includeAux && !option.includeBus, "Options are not yet implemented");
|
187
|
+
const targetProject = Project.new(this.#project.env);
|
188
|
+
const { boxGraph, masterBusBox, masterAudioUnit, rootBox } = targetProject;
|
189
|
+
const dependencies = audioUnits
|
190
|
+
.flatMap(box => Array.from(box.graph.dependenciesOf(box).boxes))
|
191
|
+
.filter(box => box.name !== SelectionBox.ClassName && box.name !== AuxSendBox.ClassName);
|
192
|
+
const uuidMap = UUID.newSet(({ source }) => source);
|
193
|
+
const allAdded = uuidMap.addMany([
|
194
|
+
...audioUnits
|
195
|
+
.filter(({ output: { targetAddress } }) => targetAddress.nonEmpty())
|
196
|
+
.map(box => ({
|
197
|
+
source: box.output.targetAddress.unwrap().uuid,
|
198
|
+
target: masterBusBox.address.uuid
|
199
|
+
})),
|
200
|
+
...audioUnits
|
201
|
+
.map(box => ({
|
202
|
+
source: box.collection.targetAddress.unwrap("AudioUnitBox was not connect to a RootBox").uuid,
|
203
|
+
target: rootBox.audioUnits.address.uuid
|
204
|
+
})),
|
205
|
+
...audioUnits
|
206
|
+
.map(box => ({ source: box.address.uuid, target: UUID.generate() })),
|
207
|
+
...dependencies
|
208
|
+
.map(({ address: { uuid }, name }) => ({ source: uuid, target: name === AudioFileBox.ClassName ? uuid : UUID.generate() }))
|
209
|
+
]);
|
210
|
+
assert(allAdded, "Some mapping are redundant");
|
211
|
+
boxGraph.beginTransaction();
|
212
|
+
PointerField.decodeWith({
|
213
|
+
map: (_pointer, newAddress) => newAddress.map(address => uuidMap.opt(address.uuid).match({
|
214
|
+
none: () => address,
|
215
|
+
some: ({ target }) => address.moveTo(target)
|
216
|
+
}))
|
217
|
+
}, () => {
|
218
|
+
audioUnits
|
219
|
+
.toSorted((a, b) => a.index.getValue() - b.index.getValue())
|
220
|
+
.forEach((source, index) => {
|
221
|
+
const input = new ByteArrayInput(source.toArrayBuffer());
|
222
|
+
const key = source.name;
|
223
|
+
const uuid = uuidMap.get(source.address.uuid).target;
|
224
|
+
const copy = boxGraph.createBox(key, uuid, box => box.read(input));
|
225
|
+
copy.index.setValue(index);
|
226
|
+
});
|
227
|
+
masterAudioUnit.index.setValue(audioUnits.length);
|
228
|
+
dependencies
|
229
|
+
.forEach((source) => {
|
230
|
+
const input = new ByteArrayInput(source.toArrayBuffer());
|
231
|
+
const key = source.name;
|
232
|
+
const uuid = uuidMap.get(source.address.uuid).target;
|
233
|
+
boxGraph.createBox(key, uuid, box => box.read(input));
|
234
|
+
});
|
235
|
+
});
|
236
|
+
boxGraph.endTransaction();
|
237
|
+
boxGraph.verifyPointers();
|
238
|
+
console.timeEnd("extractIntoNew");
|
239
|
+
return targetProject;
|
240
|
+
}
|
241
|
+
mergeInto(...sources) {
|
242
|
+
return Promise.reject("Not implemented");
|
243
|
+
}
|
180
244
|
#createAudioUnit(type, capture, index) {
|
181
245
|
const { boxGraph, rootBox, masterBusBox } = this.#project;
|
182
246
|
const insertIndex = index ?? this.#sortAudioUnitOrdering(type);
|
@@ -3,6 +3,6 @@ import { ProjectEnv } from "./ProjectEnv";
|
|
3
3
|
import { ProjectProfile } from "./ProjectProfile";
|
4
4
|
export declare namespace ProjectBundle {
|
5
5
|
const encode: ({ uuid, project, meta, cover }: ProjectProfile, progress: MutableObservableValue<unitValue>) => Promise<ArrayBuffer>;
|
6
|
-
const decode: (env: ProjectEnv, arrayBuffer: ArrayBuffer, openProfileUUID?: UUID.
|
6
|
+
const decode: (env: ProjectEnv, arrayBuffer: ArrayBuffer, openProfileUUID?: UUID.Bytes) => Promise<ProjectProfile>;
|
7
7
|
}
|
8
8
|
//# sourceMappingURL=ProjectBundle.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ProjectBundle.d.ts","sourceRoot":"","sources":["../../src/project/ProjectBundle.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,sBAAsB,EAAiB,SAAS,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAInH,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAA;AAEvC,OAAO,EAAC,cAAc,EAAC,MAAM,kBAAkB,CAAA;AAM/C,yBAAiB,aAAa,CAAC;IACpB,MAAM,MAAM,GAAU,gCAA8B,cAAc,EAC5C,UAAU,sBAAsB,CAAC,SAAS,CAAC,KAAG,OAAO,CAAC,WAAW,CAuB7F,CAAA;IAEM,MAAM,MAAM,GAAU,KAAK,UAAU,EACf,aAAa,WAAW,EACxB,kBAAkB,IAAI,CAAC,
|
1
|
+
{"version":3,"file":"ProjectBundle.d.ts","sourceRoot":"","sources":["../../src/project/ProjectBundle.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,sBAAsB,EAAiB,SAAS,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAInH,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAA;AAEvC,OAAO,EAAC,cAAc,EAAC,MAAM,kBAAkB,CAAA;AAM/C,yBAAiB,aAAa,CAAC;IACpB,MAAM,MAAM,GAAU,gCAA8B,cAAc,EAC5C,UAAU,sBAAsB,CAAC,SAAS,CAAC,KAAG,OAAO,CAAC,WAAW,CAuB7F,CAAA;IAEM,MAAM,MAAM,GAAU,KAAK,UAAU,EACf,aAAa,WAAW,EACxB,kBAAkB,IAAI,CAAC,KAAK,KAAG,OAAO,CAAC,cAAc,CA0BjF,CAAA;CAyBJ"}
|
@@ -37,7 +37,7 @@ export var ProjectBundle;
|
|
37
37
|
if (await asDefined(zip.file("version")).async("text") !== "1") {
|
38
38
|
return panic("Unknown bundle version");
|
39
39
|
}
|
40
|
-
const bundleUUID = UUID.
|
40
|
+
const bundleUUID = UUID.validateBytes(await asDefined(zip.file("uuid")).async("uint8array"));
|
41
41
|
console.debug(UUID.toString(bundleUUID), openProfileUUID ? UUID.toString(openProfileUUID) : "none");
|
42
42
|
if (isDefined(openProfileUUID) && UUID.equals(openProfileUUID, bundleUUID)) {
|
43
43
|
return panic("Project is already open");
|
@@ -4,9 +4,9 @@ export declare namespace ProjectPaths {
|
|
4
4
|
const ProjectFile = "project.od";
|
5
5
|
const ProjectMetaFile = "meta.json";
|
6
6
|
const ProjectCoverFile = "image.bin";
|
7
|
-
const projectFile: (uuid: UUID.
|
8
|
-
const projectMeta: (uuid: UUID.
|
9
|
-
const projectCover: (uuid: UUID.
|
10
|
-
const projectFolder: (uuid: UUID.
|
7
|
+
const projectFile: (uuid: UUID.Bytes) => string;
|
8
|
+
const projectMeta: (uuid: UUID.Bytes) => string;
|
9
|
+
const projectCover: (uuid: UUID.Bytes) => string;
|
10
|
+
const projectFolder: (uuid: UUID.Bytes) => string;
|
11
11
|
}
|
12
12
|
//# sourceMappingURL=ProjectPaths.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ProjectPaths.d.ts","sourceRoot":"","sources":["../../src/project/ProjectPaths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAErC,yBAAiB,YAAY,CAAC;IACnB,MAAM,MAAM,gBAAgB,CAAA;IAC5B,MAAM,WAAW,eAAe,CAAA;IAChC,MAAM,eAAe,cAAc,CAAA;IACnC,MAAM,gBAAgB,cAAc,CAAA;IACpC,MAAM,WAAW,GAAI,MAAM,IAAI,CAAC,
|
1
|
+
{"version":3,"file":"ProjectPaths.d.ts","sourceRoot":"","sources":["../../src/project/ProjectPaths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAErC,yBAAiB,YAAY,CAAC;IACnB,MAAM,MAAM,gBAAgB,CAAA;IAC5B,MAAM,WAAW,eAAe,CAAA;IAChC,MAAM,eAAe,cAAc,CAAA;IACnC,MAAM,gBAAgB,cAAc,CAAA;IACpC,MAAM,WAAW,GAAI,MAAM,IAAI,CAAC,KAAK,KAAG,MAAmD,CAAA;IAC3F,MAAM,WAAW,GAAI,MAAM,IAAI,CAAC,KAAK,KAAG,MAAuD,CAAA;IAC/F,MAAM,YAAY,GAAI,MAAM,IAAI,CAAC,KAAK,KAAG,MAAwD,CAAA;IACjG,MAAM,aAAa,GAAI,MAAM,IAAI,CAAC,KAAK,KAAG,MAA4C,CAAA;CAChG"}
|
@@ -3,8 +3,8 @@ import { ProjectMeta } from "./ProjectMeta";
|
|
3
3
|
import { Project } from "./Project";
|
4
4
|
export declare class ProjectProfile {
|
5
5
|
#private;
|
6
|
-
constructor(uuid: UUID.
|
7
|
-
get uuid(): UUID.
|
6
|
+
constructor(uuid: UUID.Bytes, project: Project, meta: ProjectMeta, cover: Option<ArrayBuffer>, hasBeenSaved?: boolean);
|
7
|
+
get uuid(): UUID.Bytes;
|
8
8
|
get project(): Project;
|
9
9
|
get meta(): ProjectMeta;
|
10
10
|
get cover(): Option<ArrayBuffer>;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ProjectProfile.d.ts","sourceRoot":"","sources":["../../src/project/ProjectProfile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAC1F,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAA;AACzC,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AAIjC,qBAAa,cAAc;;gBAYX,IAAI,EAAE,IAAI,CAAC,
|
1
|
+
{"version":3,"file":"ProjectProfile.d.ts","sourceRoot":"","sources":["../../src/project/ProjectProfile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAC1F,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAA;AACzC,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AAIjC,qBAAa,cAAc;;gBAYX,IAAI,EAAE,IAAI,CAAC,KAAK,EAChB,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,WAAW,EACjB,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,EAC1B,YAAY,GAAE,OAAe;IAUzC,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAoB;IAC1C,IAAI,OAAO,IAAI,OAAO,CAAuB;IAC7C,IAAI,IAAI,IAAI,WAAW,CAAoB;IAC3C,IAAI,KAAK,IAAI,MAAM,CAAC,WAAW,CAAC,CAAqB;IAE/C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAOrB,MAAM,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IAqBhE,KAAK,IAAI,OAAO;IAChB,UAAU,IAAI,OAAO;IAErB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,YAAY;IAIhE,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,GAAG,IAAI;IAK7C,cAAc,CAAC,GAAG,SAAS,MAAM,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,GAAG,IAAI;IAOtF,gBAAgB,IAAI,IAAI;IAExB,QAAQ,IAAI,MAAM;CAcrB"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"ProjectSignals.d.ts","sourceRoot":"","sources":["../../src/project/ProjectSignals.ts"],"names":[],"mappings":"AAAA,yBAAiB,cAAc,CAAC;IACrB,MAAM,cAAc;;MAAmD,CAAA;CACjF"}
|
@@ -0,0 +1,23 @@
|
|
1
|
+
import { Option, Progress, UUID } from "@opendaw/lib-std";
|
2
|
+
import { ProjectMeta } from "./ProjectMeta";
|
3
|
+
export declare namespace ProjectStorage {
|
4
|
+
type ListEntry = {
|
5
|
+
uuid: UUID.Bytes;
|
6
|
+
meta: ProjectMeta;
|
7
|
+
cover?: ArrayBuffer;
|
8
|
+
project?: ArrayBuffer;
|
9
|
+
};
|
10
|
+
type List = ReadonlyArray<ListEntry>;
|
11
|
+
const listProjects: ({ includeCover, includeProject, progress }?: {
|
12
|
+
includeCover?: boolean;
|
13
|
+
includeProject?: boolean;
|
14
|
+
progress?: Progress.Handler;
|
15
|
+
}) => Promise<List>;
|
16
|
+
const loadProject: (uuid: UUID.Bytes) => Promise<ArrayBuffer>;
|
17
|
+
const loadMeta: (uuid: UUID.Bytes) => Promise<ArrayBuffer>;
|
18
|
+
const loadCover: (uuid: UUID.Bytes) => Promise<Option<ArrayBuffer>>;
|
19
|
+
const listUsedSamples: () => Promise<Set<string>>;
|
20
|
+
const deleteProject: (uuid: UUID.Bytes) => Promise<void>;
|
21
|
+
const loadTrashedIds: () => Promise<Array<UUID.String>>;
|
22
|
+
}
|
23
|
+
//# sourceMappingURL=ProjectStorage.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"ProjectStorage.d.ts","sourceRoot":"","sources":["../../src/project/ProjectStorage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAE,QAAQ,EAAyB,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAI9E,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAA;AAIzC,yBAAiB,cAAc,CAAC;IAC5B,KAAY,SAAS,GAAG;QACpB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAA;QAChB,IAAI,EAAE,WAAW,CAAA;QACjB,KAAK,CAAC,EAAE,WAAW,CAAA;QACnB,OAAO,CAAC,EAAE,WAAW,CAAA;KACxB,CAAA;IAED,KAAY,IAAI,GAAG,aAAa,CAAC,SAAS,CAAC,CAAA;IAEpC,MAAM,YAAY,GAAU,6CAA0C;QACzE,YAAY,CAAC,EAAE,OAAO,CAAA;QACtB,cAAc,CAAC,EAAE,OAAO,CAAA;QACxB,QAAQ,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAA;KACzB,KAAG,OAAO,CAAC,IAAI,CAcpB,CAAA;IAEM,MAAM,WAAW,GAAU,MAAM,IAAI,CAAC,KAAK,KAAG,OAAO,CAAC,WAAW,CAEvE,CAAA;IAEM,MAAM,QAAQ,GAAU,MAAM,IAAI,CAAC,KAAK,KAAG,OAAO,CAAC,WAAW,CAEpE,CAAA;IAEM,MAAM,SAAS,GAAU,MAAM,IAAI,CAAC,KAAK,KAAG,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAG7E,CAAA;IAEM,MAAM,eAAe,QAAa,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAa3D,CAAA;IAEM,MAAM,aAAa,GAAU,MAAM,IAAI,CAAC,KAAK,kBAMnD,CAAA;IAEM,MAAM,cAAc,QAAa,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAGjE,CAAA;CACJ"}
|
@@ -0,0 +1,59 @@
|
|
1
|
+
import { Option, safeExecute, tryCatch, UUID } from "@opendaw/lib-std";
|
2
|
+
import { AudioFileBox } from "@opendaw/studio-boxes";
|
3
|
+
import { ProjectDecoder } from "@opendaw/studio-adapters";
|
4
|
+
import { Promises } from "@opendaw/lib-runtime";
|
5
|
+
import { WorkerAgents } from "../WorkerAgents";
|
6
|
+
import { ProjectPaths } from "./ProjectPaths";
|
7
|
+
export var ProjectStorage;
|
8
|
+
(function (ProjectStorage) {
|
9
|
+
ProjectStorage.listProjects = async ({ includeCover, includeProject, progress } = {}) => {
|
10
|
+
return WorkerAgents.Opfs.list(ProjectPaths.Folder)
|
11
|
+
.then(files => Promise.all(files.filter(file => file.kind === "directory")
|
12
|
+
.map(async ({ name }, index, { length }) => {
|
13
|
+
safeExecute(progress, (index + 1) / length);
|
14
|
+
const uuid = UUID.parse(name);
|
15
|
+
const array = await WorkerAgents.Opfs.read(ProjectPaths.projectMeta(uuid));
|
16
|
+
return {
|
17
|
+
uuid,
|
18
|
+
meta: JSON.parse(new TextDecoder().decode(array)),
|
19
|
+
cover: includeCover ? (await ProjectStorage.loadCover(uuid)).unwrapOrUndefined() : undefined,
|
20
|
+
project: includeProject ? await ProjectStorage.loadProject(uuid) : undefined
|
21
|
+
};
|
22
|
+
})));
|
23
|
+
};
|
24
|
+
ProjectStorage.loadProject = async (uuid) => {
|
25
|
+
return WorkerAgents.Opfs.read(ProjectPaths.projectFile(uuid)).then(array => array.buffer);
|
26
|
+
};
|
27
|
+
ProjectStorage.loadMeta = async (uuid) => {
|
28
|
+
return WorkerAgents.Opfs.read(ProjectPaths.projectMeta(uuid)).then(array => array.buffer);
|
29
|
+
};
|
30
|
+
ProjectStorage.loadCover = async (uuid) => {
|
31
|
+
return WorkerAgents.Opfs.read(ProjectPaths.projectCover(uuid))
|
32
|
+
.then(array => Option.wrap(array.buffer), () => Option.None);
|
33
|
+
};
|
34
|
+
ProjectStorage.listUsedSamples = async () => {
|
35
|
+
const uuids = [];
|
36
|
+
const files = await WorkerAgents.Opfs.list(ProjectPaths.Folder);
|
37
|
+
for (const { name } of files.filter(file => file.kind === "directory")) {
|
38
|
+
const result = await WorkerAgents.Opfs.read(ProjectPaths.projectFile(UUID.parse(name)));
|
39
|
+
tryCatch(() => {
|
40
|
+
const { boxGraph } = ProjectDecoder.decode(result.buffer);
|
41
|
+
uuids.push(...boxGraph.boxes()
|
42
|
+
.filter(box => box instanceof AudioFileBox)
|
43
|
+
.map((box) => UUID.toString(box.address.uuid)));
|
44
|
+
});
|
45
|
+
}
|
46
|
+
return new Set(uuids);
|
47
|
+
};
|
48
|
+
ProjectStorage.deleteProject = async (uuid) => {
|
49
|
+
const array = await ProjectStorage.loadTrashedIds();
|
50
|
+
array.push(UUID.toString(uuid));
|
51
|
+
const trash = new TextEncoder().encode(JSON.stringify(array));
|
52
|
+
await WorkerAgents.Opfs.write(`${ProjectPaths.Folder}/trash.json`, trash);
|
53
|
+
await WorkerAgents.Opfs.delete(ProjectPaths.projectFolder(uuid));
|
54
|
+
};
|
55
|
+
ProjectStorage.loadTrashedIds = async () => {
|
56
|
+
const { status, value } = await Promises.tryCatch(WorkerAgents.Opfs.read(`${ProjectPaths.Folder}/trash.json`));
|
57
|
+
return status === "rejected" ? [] : JSON.parse(new TextDecoder().decode(value));
|
58
|
+
};
|
59
|
+
})(ProjectStorage || (ProjectStorage = {}));
|
@@ -4,10 +4,10 @@ import { AudioData, SampleLoader, SampleLoaderState, SampleMetaData } from "@ope
|
|
4
4
|
import { MainThreadSampleManager } from "./MainThreadSampleManager";
|
5
5
|
export declare class MainThreadSampleLoader implements SampleLoader {
|
6
6
|
#private;
|
7
|
-
constructor(manager: MainThreadSampleManager, uuid: UUID.
|
7
|
+
constructor(manager: MainThreadSampleManager, uuid: UUID.Bytes);
|
8
8
|
invalidate(): void;
|
9
9
|
subscribe(observer: Observer<SampleLoaderState>): Subscription;
|
10
|
-
get uuid(): UUID.
|
10
|
+
get uuid(): UUID.Bytes;
|
11
11
|
get data(): Option<AudioData>;
|
12
12
|
get meta(): Option<SampleMetaData>;
|
13
13
|
get peaks(): Option<Peaks>;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"MainThreadSampleLoader.d.ts","sourceRoot":"","sources":["../../src/samples/MainThreadSampleLoader.ts"],"names":[],"mappings":"AAAA,OAAO,EAIH,QAAQ,EACR,MAAM,EAEN,YAAY,EAEZ,IAAI,EACP,MAAM,kBAAkB,CAAA;AAEzB,OAAO,EAAC,KAAK,EAAc,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAC,SAAS,EAAE,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAC,MAAM,0BAA0B,CAAA;AAEnG,OAAO,EAAC,uBAAuB,EAAC,MAAM,2BAA2B,CAAA;AAGjE,qBAAa,sBAAuB,YAAW,YAAY;;gBAY3C,OAAO,EAAE,uBAAuB,EAAE,IAAI,EAAE,IAAI,CAAC,
|
1
|
+
{"version":3,"file":"MainThreadSampleLoader.d.ts","sourceRoot":"","sources":["../../src/samples/MainThreadSampleLoader.ts"],"names":[],"mappings":"AAAA,OAAO,EAIH,QAAQ,EACR,MAAM,EAEN,YAAY,EAEZ,IAAI,EACP,MAAM,kBAAkB,CAAA;AAEzB,OAAO,EAAC,KAAK,EAAc,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAC,SAAS,EAAE,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAC,MAAM,0BAA0B,CAAA;AAEnG,OAAO,EAAC,uBAAuB,EAAC,MAAM,2BAA2B,CAAA;AAGjE,qBAAa,sBAAuB,YAAW,YAAY;;gBAY3C,OAAO,EAAE,uBAAuB,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK;IAQ9D,UAAU,IAAI,IAAI;IASlB,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,iBAAiB,CAAC,GAAG,YAAY;IAQ9D,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAoB;IAC1C,IAAI,IAAI,IAAI,MAAM,CAAC,SAAS,CAAC,CAAoB;IACjD,IAAI,IAAI,IAAI,MAAM,CAAC,cAAc,CAAC,CAAoB;IACtD,IAAI,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,CAAqB;IAC/C,IAAI,KAAK,IAAI,iBAAiB,CAAqB;IAEnD,QAAQ,IAAI,MAAM;CA8DrB"}
|
@@ -45,8 +45,7 @@ export class MainThreadSampleLoader {
|
|
45
45
|
}
|
46
46
|
#get() {
|
47
47
|
let version = this.#version;
|
48
|
-
SampleStorage.
|
49
|
-
.then(([data, peaks, meta]) => {
|
48
|
+
SampleStorage.loadSample(this.#uuid).then(([data, peaks, meta]) => {
|
50
49
|
if (this.#version !== version) {
|
51
50
|
console.warn(`Ignore obsolete version: ${this.#version} / ${version}`);
|
52
51
|
return;
|
@@ -83,7 +82,7 @@ export class MainThreadSampleLoader {
|
|
83
82
|
const [audio, meta] = fetchResult.value;
|
84
83
|
const shifts = SamplePeaks.findBestFit(audio.numberOfFrames);
|
85
84
|
const peaks = await WorkerAgents.Peak.generateAsync(peakProgress, shifts, audio.frames, audio.numberOfFrames, audio.numberOfChannels);
|
86
|
-
const storeResult = await Promises.tryCatch(SampleStorage.
|
85
|
+
const storeResult = await Promises.tryCatch(SampleStorage.saveSample(this.#uuid, audio, peaks, meta));
|
87
86
|
if (this.#version !== version) {
|
88
87
|
return;
|
89
88
|
}
|
@@ -5,10 +5,10 @@ export declare class MainThreadSampleManager implements SampleManager, SamplePro
|
|
5
5
|
#private;
|
6
6
|
constructor(api: SampleProvider, context: AudioContext);
|
7
7
|
get context(): AudioContext;
|
8
|
-
fetch(uuid: UUID.
|
9
|
-
remove(uuid: UUID.
|
10
|
-
invalidate(uuid: UUID.
|
8
|
+
fetch(uuid: UUID.Bytes, progress: Progress.Handler): Promise<[AudioData, SampleMetaData]>;
|
9
|
+
remove(uuid: UUID.Bytes): void;
|
10
|
+
invalidate(uuid: UUID.Bytes): void;
|
11
11
|
record(loader: SampleLoader): void;
|
12
|
-
getOrCreate(uuid: UUID.
|
12
|
+
getOrCreate(uuid: UUID.Bytes): SampleLoader;
|
13
13
|
}
|
14
14
|
//# sourceMappingURL=MainThreadSampleManager.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"MainThreadSampleManager.d.ts","sourceRoot":"","sources":["../../src/samples/MainThreadSampleManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAa,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAC1D,OAAO,EAAC,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAC,MAAM,0BAA0B,CAAA;AAE/F,OAAO,EAAC,cAAc,EAAC,MAAM,kBAAkB,CAAA;AAE/C,qBAAa,uBAAwB,YAAW,aAAa,EAAE,cAAc;;gBAK7D,GAAG,EAAE,cAAc,EAAE,OAAO,EAAE,YAAY;IAMtD,IAAI,OAAO,IAAI,YAAY,CAAuB;IAElD,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,
|
1
|
+
{"version":3,"file":"MainThreadSampleManager.d.ts","sourceRoot":"","sources":["../../src/samples/MainThreadSampleManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAa,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAC1D,OAAO,EAAC,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAC,MAAM,0BAA0B,CAAA;AAE/F,OAAO,EAAC,cAAc,EAAC,MAAM,kBAAkB,CAAA;AAE/C,qBAAa,uBAAwB,YAAW,aAAa,EAAE,cAAc;;gBAK7D,GAAG,EAAE,cAAc,EAAE,OAAO,EAAE,YAAY;IAMtD,IAAI,OAAO,IAAI,YAAY,CAAuB;IAElD,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IAIzF,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK;IACvB,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK;IAE3B,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAElC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,GAAG,YAAY;CAG9C"}
|
@@ -4,10 +4,12 @@ import { SampleAPI } from "@opendaw/studio-core";
|
|
4
4
|
export declare class OpenSampleAPI implements SampleAPI {
|
5
5
|
static readonly ApiRoot = "https://api.opendaw.studio/samples";
|
6
6
|
static readonly FileRoot = "https://assets.opendaw.studio/samples";
|
7
|
+
static get(): OpenSampleAPI;
|
7
8
|
static fromAudioBuffer(buffer: AudioBuffer): AudioData;
|
9
|
+
private constructor();
|
8
10
|
all(): Promise<ReadonlyArray<Sample>>;
|
9
|
-
get(uuid: UUID.
|
10
|
-
load(context: AudioContext, uuid: UUID.
|
11
|
+
get(uuid: UUID.Bytes): Promise<Sample>;
|
12
|
+
load(context: AudioContext, uuid: UUID.Bytes, progress: Procedure<unitValue>): Promise<[AudioData, Sample]>;
|
11
13
|
upload(arrayBuffer: ArrayBuffer, metaData: SampleMetaData): Promise<void>;
|
12
14
|
allowsUpload(): boolean;
|
13
15
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"OpenSampleAPI.d.ts","sourceRoot":"","sources":["../../src/samples/OpenSampleAPI.ts"],"names":[],"mappings":"AAAA,OAAO,
|
1
|
+
{"version":3,"file":"OpenSampleAPI.d.ts","sourceRoot":"","sources":["../../src/samples/OpenSampleAPI.ts"],"names":[],"mappings":"AAAA,OAAO,EAMH,SAAS,EAGT,SAAS,EACT,IAAI,EACP,MAAM,kBAAkB,CAAA;AAEzB,OAAO,EAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAC,MAAM,0BAA0B,CAAA;AAC1E,OAAO,EAAC,SAAS,EAAC,MAAM,sBAAsB,CAAA;AAY9C,qBAAa,aAAc,YAAW,SAAS;IAC3C,MAAM,CAAC,QAAQ,CAAC,OAAO,wCAAuC;IAC9D,MAAM,CAAC,QAAQ,CAAC,QAAQ,2CAA0C;IAGlE,MAAM,CAAC,GAAG,IAAI,aAAa;IAE3B,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS;IAStD,OAAO;IAED,GAAG,IAAI,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAKrC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;IAQtC,IAAI,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAkC3G,MAAM,CAAC,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAsC/E,YAAY,IAAI,OAAO;CAC1B"}
|
@@ -1,4 +1,13 @@
|
|
1
|
-
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
6
|
+
};
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
9
|
+
};
|
10
|
+
import { Arrays, asDefined, DefaultObservableValue, Lazy, panic, RuntimeNotifier, tryCatch, UUID } from "@opendaw/lib-std";
|
2
11
|
import { network, Promises } from "@opendaw/lib-runtime";
|
3
12
|
const username = "openDAW";
|
4
13
|
const password = "prototype";
|
@@ -8,10 +17,11 @@ const headers = {
|
|
8
17
|
headers: { "Authorization": `Basic ${base64Credentials}` },
|
9
18
|
credentials: "include"
|
10
19
|
};
|
11
|
-
// Standard openDAW samples
|
20
|
+
// Standard openDAW samples (considered to be non-removable)
|
12
21
|
export class OpenSampleAPI {
|
13
22
|
static ApiRoot = "https://api.opendaw.studio/samples";
|
14
23
|
static FileRoot = "https://assets.opendaw.studio/samples";
|
24
|
+
static get() { return new OpenSampleAPI(); }
|
15
25
|
static fromAudioBuffer(buffer) {
|
16
26
|
return {
|
17
27
|
frames: Arrays.create(channel => buffer.getChannelData(channel), buffer.numberOfChannels),
|
@@ -20,6 +30,7 @@ export class OpenSampleAPI {
|
|
20
30
|
numberOfChannels: buffer.numberOfChannels
|
21
31
|
};
|
22
32
|
}
|
33
|
+
constructor() { }
|
23
34
|
async all() {
|
24
35
|
return Promises.retry(() => fetch(`${OpenSampleAPI.ApiRoot}/list.php`, headers)
|
25
36
|
.then(x => x.json(), () => []));
|
@@ -107,3 +118,9 @@ export class OpenSampleAPI {
|
|
107
118
|
}
|
108
119
|
allowsUpload() { return false; }
|
109
120
|
}
|
121
|
+
__decorate([
|
122
|
+
Lazy,
|
123
|
+
__metadata("design:type", Function),
|
124
|
+
__metadata("design:paramtypes", []),
|
125
|
+
__metadata("design:returntype", OpenSampleAPI)
|
126
|
+
], OpenSampleAPI, "get", null);
|
@@ -2,8 +2,8 @@ import { AudioData, Sample, SampleMetaData } from "@opendaw/studio-adapters";
|
|
2
2
|
import { Procedure, unitValue, UUID } from "@opendaw/lib-std";
|
3
3
|
export interface SampleAPI {
|
4
4
|
all(): Promise<ReadonlyArray<Sample>>;
|
5
|
-
get(uuid: UUID.
|
6
|
-
load(context: AudioContext, uuid: UUID.
|
5
|
+
get(uuid: UUID.Bytes): Promise<Sample>;
|
6
|
+
load(context: AudioContext, uuid: UUID.Bytes, progress: Procedure<unitValue>): Promise<[AudioData, Sample]>;
|
7
7
|
upload(arrayBuffer: ArrayBuffer, metaData: SampleMetaData): Promise<void>;
|
8
8
|
allowsUpload(): boolean;
|
9
9
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"SampleAPI.d.ts","sourceRoot":"","sources":["../../src/samples/SampleAPI.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAC,MAAM,0BAA0B,CAAA;AAC1E,OAAO,EAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAE3D,MAAM,WAAW,SAAS;IACtB,GAAG,IAAI,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAA;IACrC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,
|
1
|
+
{"version":3,"file":"SampleAPI.d.ts","sourceRoot":"","sources":["../../src/samples/SampleAPI.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAC,MAAM,0BAA0B,CAAA;AAC1E,OAAO,EAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAE3D,MAAM,WAAW,SAAS;IACtB,GAAG,IAAI,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAA;IACrC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACtC,IAAI,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAA;IAC3G,MAAM,CAAC,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACzE,YAAY,IAAI,OAAO,CAAA;CAC1B"}
|
@@ -2,7 +2,7 @@ import { Progress, UUID } from "@opendaw/lib-std";
|
|
2
2
|
import { Sample } from "@opendaw/studio-adapters";
|
3
3
|
export type SampleImporter = {
|
4
4
|
importSample(sample: {
|
5
|
-
uuid: UUID.
|
5
|
+
uuid: UUID.Bytes;
|
6
6
|
name: string;
|
7
7
|
arrayBuffer: ArrayBuffer;
|
8
8
|
progressHandler?: Progress.Handler;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"SampleImporter.d.ts","sourceRoot":"","sources":["../../src/samples/SampleImporter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAC,MAAM,EAAC,MAAM,0BAA0B,CAAA;AAE/C,MAAM,MAAM,cAAc,GAAG;IACzB,YAAY,CAAC,MAAM,EAAE;QACjB,IAAI,EAAE,IAAI,CAAC,
|
1
|
+
{"version":3,"file":"SampleImporter.d.ts","sourceRoot":"","sources":["../../src/samples/SampleImporter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAC,MAAM,EAAC,MAAM,0BAA0B,CAAA;AAE/C,MAAM,MAAM,cAAc,GAAG;IACzB,YAAY,CAAC,MAAM,EAAE;QACjB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,WAAW,CAAC;QACzB,eAAe,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAA;KACrC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;CACtB,CAAA"}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import { Progress, UUID } from "@opendaw/lib-std";
|
2
2
|
import { AudioData, SampleMetaData } from "@opendaw/studio-adapters";
|
3
3
|
export interface SampleProvider {
|
4
|
-
fetch(uuid: UUID.
|
4
|
+
fetch(uuid: UUID.Bytes, progress: Progress.Handler): Promise<[AudioData, SampleMetaData]>;
|
5
5
|
}
|
6
6
|
//# sourceMappingURL=SampleProvider.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"SampleProvider.d.ts","sourceRoot":"","sources":["../../src/samples/SampleProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAC,SAAS,EAAE,cAAc,EAAC,MAAM,0BAA0B,CAAA;AAElE,MAAM,WAAW,cAAc;IAC3B,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,
|
1
|
+
{"version":3,"file":"SampleProvider.d.ts","sourceRoot":"","sources":["../../src/samples/SampleProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAC,SAAS,EAAE,cAAc,EAAC,MAAM,0BAA0B,CAAA;AAElE,MAAM,WAAW,cAAc;IAC3B,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,CAAA;CAC5F"}
|
@@ -4,10 +4,12 @@ import { AudioData, Sample, SampleMetaData } from "@opendaw/studio-adapters";
|
|
4
4
|
export declare namespace SampleStorage {
|
5
5
|
const clean: () => Promise<void>;
|
6
6
|
const Folder = "samples/v2";
|
7
|
-
const
|
8
|
-
const
|
9
|
-
const
|
10
|
-
const
|
11
|
-
const
|
7
|
+
const saveSample: (uuid: UUID.Bytes, audio: AudioData, peaks: ArrayBuffer, meta: SampleMetaData) => Promise<void>;
|
8
|
+
const updateSampleMeta: (uuid: UUID.Bytes, meta: SampleMetaData) => Promise<void>;
|
9
|
+
const loadSample: (uuid: UUID.Bytes) => Promise<[AudioData, Peaks, SampleMetaData]>;
|
10
|
+
const deleteSample: (uuid: UUID.Bytes) => Promise<void>;
|
11
|
+
const loadTrashedIds: () => Promise<Array<UUID.String>>;
|
12
|
+
const saveTrashedIds: (ids: ReadonlyArray<UUID.String>) => Promise<void>;
|
13
|
+
const listSamples: () => Promise<ReadonlyArray<Sample>>;
|
12
14
|
}
|
13
15
|
//# sourceMappingURL=SampleStorage.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"SampleStorage.d.ts","sourceRoot":"","sources":["../../src/samples/SampleStorage.ts"],"names":[],"mappings":"AAAA,OAAO,
|
1
|
+
{"version":3,"file":"SampleStorage.d.ts","sourceRoot":"","sources":["../../src/samples/SampleStorage.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAEhE,OAAO,EAAC,KAAK,EAAc,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAC,MAAM,0BAA0B,CAAA;AAI1E,yBAAiB,aAAa,CAAC;IACpB,MAAM,KAAK,qBAAgE,CAAA;IAE3E,MAAM,MAAM,eAAe,CAAA;IAE3B,MAAM,UAAU,GAAU,MAAM,IAAI,CAAC,KAAK,EAChB,OAAO,SAAS,EAChB,OAAO,WAAW,EAClB,MAAM,cAAc,KAAG,OAAO,CAAC,IAAI,CAanE,CAAA;IAEM,MAAM,gBAAgB,GAAU,MAAM,IAAI,CAAC,KAAK,EAAE,MAAM,cAAc,KAAG,OAAO,CAAC,IAAI,CAG3F,CAAA;IAEM,MAAM,UAAU,GAAU,MAAM,IAAI,CAAC,KAAK,KAAG,OAAO,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,cAAc,CAAC,CAe7F,CAAA;IAEM,MAAM,YAAY,GAAU,MAAM,IAAI,CAAC,KAAK,KAAG,OAAO,CAAC,IAAI,CAMjE,CAAA;IAEM,MAAM,cAAc,QAAa,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAGjE,CAAA;IAEM,MAAM,cAAc,GAAU,KAAK,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,KAAG,OAAO,CAAC,IAAI,CAGlF,CAAA;IAEM,MAAM,WAAW,QAAa,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAOjE,CAAA;CACJ"}
|