@opendaw/studio-core 0.0.25 → 0.0.27
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/AudioDevices.js +4 -4
- package/dist/AudioOfflineRenderer.d.ts.map +1 -1
- package/dist/AudioOfflineRenderer.js +9 -5
- 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.d.ts.map +1 -1
- package/dist/capture/CaptureAudio.js +4 -4
- package/dist/capture/CaptureDevices.d.ts +1 -1
- package/dist/capture/CaptureDevices.d.ts.map +1 -1
- package/dist/capture/CaptureMidi.d.ts.map +1 -1
- package/dist/capture/CaptureMidi.js +6 -5
- package/dist/capture/Recording.d.ts.map +1 -1
- package/dist/capture/Recording.js +3 -3
- 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 +18 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -12
- package/dist/midi/MIDILearning.d.ts +26 -0
- package/dist/midi/MIDILearning.d.ts.map +1 -0
- package/dist/midi/MIDILearning.js +88 -0
- package/dist/midi/MIDIMessageSubscriber.d.ts +5 -0
- package/dist/midi/MIDIMessageSubscriber.d.ts.map +1 -0
- package/dist/midi/MIDIMessageSubscriber.js +40 -0
- package/dist/midi/MidiDevices.d.ts.map +1 -0
- package/dist/{MidiDevices.js → midi/MidiDevices.js} +6 -5
- package/dist/processors.js +3 -3
- package/dist/processors.js.map +4 -4
- package/dist/project/Project.d.ts +2 -0
- package/dist/project/Project.d.ts.map +1 -1
- package/dist/project/Project.js +7 -1
- 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 +10 -12
- 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/ProjectProfile.js +3 -3
- 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/MidiDevices.d.ts.map +0 -1
- package/dist/Wav.d.ts +0 -6
- package/dist/Wav.d.ts.map +0 -1
- package/dist/Wav.js +0 -46
- /package/dist/{MidiDevices.d.ts → midi/MidiDevices.d.ts} +0 -0
@@ -10,6 +10,7 @@ import { CaptureDevices } from "../capture/CaptureDevices";
|
|
10
10
|
import { EngineFacade } from "../EngineFacade";
|
11
11
|
import { EngineWorklet } from "../EngineWorklet";
|
12
12
|
import { AudioWorklets } from "../AudioWorklets";
|
13
|
+
import { MIDILearning } from "../midi/MIDILearning";
|
13
14
|
export type RestartWorklet = {
|
14
15
|
unload: Procedure<unknown>;
|
15
16
|
load: Procedure<EngineWorklet>;
|
@@ -33,6 +34,7 @@ export declare class Project implements BoxAdaptersContext, Terminable, Terminab
|
|
33
34
|
readonly userEditingManager: UserEditingManager;
|
34
35
|
readonly parameterFieldAdapters: ParameterFieldAdapters;
|
35
36
|
readonly liveStreamReceiver: LiveStreamReceiver;
|
37
|
+
readonly midiLearning: MIDILearning;
|
36
38
|
readonly mixer: Mixer;
|
37
39
|
readonly engine: EngineFacade;
|
38
40
|
private constructor();
|
@@ -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;AAC9C,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
@@ -10,6 +10,7 @@ import { ProjectMigration } from "./ProjectMigration";
|
|
10
10
|
import { CaptureDevices } from "../capture/CaptureDevices";
|
11
11
|
import { EngineFacade } from "../EngineFacade";
|
12
12
|
import { Recording } from "../capture/Recording";
|
13
|
+
import { MIDILearning } from "../midi/MIDILearning";
|
13
14
|
// Main Entry Point for a Project
|
14
15
|
export class Project {
|
15
16
|
static new(env) {
|
@@ -75,6 +76,7 @@ export class Project {
|
|
75
76
|
userEditingManager;
|
76
77
|
parameterFieldAdapters;
|
77
78
|
liveStreamReceiver;
|
79
|
+
midiLearning;
|
78
80
|
mixer;
|
79
81
|
engine = new EngineFacade();
|
80
82
|
constructor(env, boxGraph, { rootBox, userInterfaceBox, masterBusBox, masterAudioUnit, timelineBox }) {
|
@@ -94,6 +96,7 @@ export class Project {
|
|
94
96
|
this.userEditingManager.follow(this.userInterfaceBox);
|
95
97
|
this.selection.switch(this.userInterfaceBox.selection);
|
96
98
|
this.liveStreamReceiver = this.#terminator.own(new LiveStreamReceiver());
|
99
|
+
this.midiLearning = this.#terminator.own(new MIDILearning(this));
|
97
100
|
this.captureDevices = this.#terminator.own(new CaptureDevices(this));
|
98
101
|
this.mixer = new Mixer(this.rootBoxAdapter.audioUnits);
|
99
102
|
console.debug(`Project was created on ${this.rootBoxAdapter.created.toString()}`);
|
@@ -165,5 +168,8 @@ export class Project {
|
|
165
168
|
return output.toArrayBuffer();
|
166
169
|
}
|
167
170
|
copy() { return Project.load(this.#env, this.toArrayBuffer()); }
|
168
|
-
terminate() {
|
171
|
+
terminate() {
|
172
|
+
console.debug("Project terminated");
|
173
|
+
this.#terminator.terminate();
|
174
|
+
}
|
169
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":"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"}
|
@@ -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,
|
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,
|
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"}
|
@@ -31,35 +31,33 @@ export var ProjectBundle;
|
|
31
31
|
progress.setValue(1.0);
|
32
32
|
return blob.arrayBuffer();
|
33
33
|
};
|
34
|
-
ProjectBundle.decode = async (env, arrayBuffer,
|
34
|
+
ProjectBundle.decode = async (env, arrayBuffer, openProfileUUID) => {
|
35
35
|
const { default: JSZip } = await import("jszip");
|
36
36
|
const zip = await JSZip.loadAsync(arrayBuffer);
|
37
37
|
if (await asDefined(zip.file("version")).async("text") !== "1") {
|
38
38
|
return panic("Unknown bundle version");
|
39
39
|
}
|
40
|
-
const bundleUUID = UUID.
|
41
|
-
console.debug(UUID.toString(bundleUUID),
|
42
|
-
if (isDefined(
|
40
|
+
const bundleUUID = UUID.validateBytes(await asDefined(zip.file("uuid")).async("uint8array"));
|
41
|
+
console.debug(UUID.toString(bundleUUID), openProfileUUID ? UUID.toString(openProfileUUID) : "none");
|
42
|
+
if (isDefined(openProfileUUID) && UUID.equals(openProfileUUID, bundleUUID)) {
|
43
43
|
return panic("Project is already open");
|
44
44
|
}
|
45
45
|
console.debug("loading samples...");
|
46
46
|
const samples = asDefined(zip.folder("samples"), "Could not find samples");
|
47
47
|
const promises = [];
|
48
48
|
samples.forEach((path, file) => {
|
49
|
-
if (
|
50
|
-
|
51
|
-
.async("arraybuffer")
|
52
|
-
.then(arrayBuffer => WorkerAgents.Opfs
|
53
|
-
.write(`${SampleStorage.Folder}/${path}`, new Uint8Array(arrayBuffer))));
|
49
|
+
if (file.dir) {
|
50
|
+
return;
|
54
51
|
}
|
52
|
+
promises.push(file.async("arraybuffer")
|
53
|
+
.then(arrayBuffer => WorkerAgents.Opfs
|
54
|
+
.write(`${SampleStorage.Folder}/${path}`, new Uint8Array(arrayBuffer))));
|
55
55
|
});
|
56
56
|
await Promise.all(promises);
|
57
57
|
const project = Project.load(env, await asDefined(zip.file(ProjectPaths.ProjectFile)).async("arraybuffer"));
|
58
58
|
const meta = JSON.parse(await asDefined(zip.file(ProjectPaths.ProjectMetaFile)).async("text"));
|
59
59
|
const coverFile = zip.file(ProjectPaths.ProjectCoverFile);
|
60
|
-
const cover =
|
61
|
-
? Option.wrap(await coverFile.async("arraybuffer"))
|
62
|
-
: Option.None;
|
60
|
+
const cover = Option.wrap(await coverFile?.async("arraybuffer"));
|
63
61
|
return new ProjectProfile(bundleUUID, project, meta, cover);
|
64
62
|
};
|
65
63
|
const pipeSampleLoaderInto = async (loader, zip) => {
|
@@ -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"}
|
@@ -36,9 +36,9 @@ export class ProjectProfile {
|
|
36
36
|
const uuid = UUID.generate();
|
37
37
|
const project = this.project.copy();
|
38
38
|
const meta = ProjectMeta.copy(this.meta);
|
39
|
-
const
|
40
|
-
await ProjectProfile.#writeFiles(
|
41
|
-
return Option.wrap(
|
39
|
+
const profile = new ProjectProfile(uuid, project, meta, Option.None, true);
|
40
|
+
await ProjectProfile.#writeFiles(profile);
|
41
|
+
return Option.wrap(profile);
|
42
42
|
}
|
43
43
|
else {
|
44
44
|
return ProjectProfile.#writeFiles(this).then(() => {
|
@@ -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"}
|