@opendaw/studio-core 0.0.23 → 0.0.25
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.d.ts.map +1 -1
- package/dist/AudioDevices.js +1 -0
- package/dist/AudioOfflineRenderer.d.ts +8 -0
- package/dist/AudioOfflineRenderer.d.ts.map +1 -0
- package/dist/AudioOfflineRenderer.js +88 -0
- package/dist/{Worklets.d.ts → AudioWorklets.d.ts} +6 -5
- package/dist/AudioWorklets.d.ts.map +1 -0
- package/dist/{Worklets.js → AudioWorklets.js} +6 -4
- package/dist/EffectFactory.d.ts +1 -1
- package/dist/EffectFactory.d.ts.map +1 -1
- package/dist/Engine.d.ts +6 -16
- package/dist/Engine.d.ts.map +1 -1
- package/dist/EngineFacade.d.ts +10 -9
- package/dist/EngineFacade.d.ts.map +1 -1
- package/dist/EngineFacade.js +28 -25
- package/dist/EngineWorklet.d.ts +7 -7
- package/dist/EngineWorklet.d.ts.map +1 -1
- package/dist/EngineWorklet.js +8 -16
- package/dist/FilePickerAcceptTypes.d.ts +8 -0
- package/dist/FilePickerAcceptTypes.d.ts.map +1 -0
- package/dist/FilePickerAcceptTypes.js +27 -0
- package/dist/MidiDevices.d.ts +2 -1
- package/dist/MidiDevices.d.ts.map +1 -1
- package/dist/MidiDevices.js +12 -1
- package/dist/PeaksWriter.d.ts +19 -0
- package/dist/PeaksWriter.d.ts.map +1 -0
- package/dist/PeaksWriter.js +43 -0
- package/dist/RecordingWorklet.d.ts +4 -2
- package/dist/RecordingWorklet.d.ts.map +1 -1
- package/dist/RecordingWorklet.js +36 -62
- package/dist/WorkerAgents.d.ts +1 -1
- package/dist/WorkerAgents.d.ts.map +1 -1
- package/dist/WorkerAgents.js +3 -3
- package/dist/capture/Capture.d.ts +5 -6
- package/dist/capture/Capture.d.ts.map +1 -1
- package/dist/capture/CaptureAudio.d.ts +4 -5
- package/dist/capture/CaptureAudio.d.ts.map +1 -1
- package/dist/capture/CaptureAudio.js +31 -14
- package/dist/capture/{CaptureManager.d.ts → CaptureDevices.d.ts} +4 -3
- package/dist/capture/CaptureDevices.d.ts.map +1 -0
- package/dist/capture/{CaptureManager.js → CaptureDevices.js} +10 -1
- package/dist/capture/CaptureMidi.d.ts +8 -6
- package/dist/capture/CaptureMidi.d.ts.map +1 -1
- package/dist/capture/CaptureMidi.js +67 -47
- package/dist/capture/RecordAudio.d.ts +2 -2
- package/dist/capture/RecordAudio.d.ts.map +1 -1
- package/dist/capture/RecordAudio.js +50 -36
- package/dist/capture/RecordMidi.d.ts +3 -2
- package/dist/capture/RecordMidi.d.ts.map +1 -1
- package/dist/capture/RecordMidi.js +19 -22
- package/dist/capture/Recording.d.ts +2 -2
- package/dist/capture/Recording.d.ts.map +1 -1
- package/dist/capture/Recording.js +10 -11
- package/dist/dawproject/DawProject.d.ts +1 -1
- package/dist/dawproject/DawProject.d.ts.map +1 -1
- package/dist/dawproject/DawProject.js +3 -2
- package/dist/dawproject/DawProjectExporter.d.ts +1 -1
- package/dist/dawproject/DawProjectExporter.d.ts.map +1 -1
- package/dist/dawproject/DawProjectExporter.test.js +6 -5
- package/dist/index.d.ts +16 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -6
- package/dist/processors.js +3 -3
- package/dist/processors.js.map +4 -4
- package/dist/{Project.d.ts → project/Project.d.ts} +8 -7
- package/dist/project/Project.d.ts.map +1 -0
- package/dist/{Project.js → project/Project.js} +17 -9
- package/dist/{ProjectApi.d.ts → project/ProjectApi.d.ts} +5 -5
- package/dist/project/ProjectApi.d.ts.map +1 -0
- package/dist/{ProjectApi.js → project/ProjectApi.js} +2 -2
- package/dist/project/ProjectBundle.d.ts +8 -0
- package/dist/project/ProjectBundle.d.ts.map +1 -0
- package/dist/project/ProjectBundle.js +90 -0
- package/dist/project/ProjectEnv.d.ts +8 -0
- package/dist/project/ProjectEnv.d.ts.map +1 -0
- package/dist/project/ProjectMeta.d.ts +14 -0
- package/dist/project/ProjectMeta.d.ts.map +1 -0
- package/dist/project/ProjectMeta.js +12 -0
- package/dist/project/ProjectMigration.d.ts.map +1 -0
- package/dist/project/ProjectPaths.d.ts +12 -0
- package/dist/project/ProjectPaths.d.ts.map +1 -0
- package/dist/project/ProjectPaths.js +12 -0
- package/dist/project/ProjectProfile.d.ts +21 -0
- package/dist/project/ProjectProfile.d.ts.map +1 -0
- package/dist/project/ProjectProfile.js +83 -0
- package/dist/samples/MainThreadSampleLoader.d.ts +0 -2
- package/dist/samples/MainThreadSampleLoader.d.ts.map +1 -1
- package/dist/samples/MainThreadSampleLoader.js +1 -26
- package/dist/samples/MainThreadSampleManager.d.ts +1 -0
- package/dist/samples/MainThreadSampleManager.d.ts.map +1 -1
- package/dist/samples/MainThreadSampleManager.js +1 -0
- package/dist/samples/OpenSampleAPI.d.ts +14 -0
- package/dist/samples/OpenSampleAPI.d.ts.map +1 -0
- package/dist/samples/OpenSampleAPI.js +109 -0
- package/dist/samples/SampleAPI.d.ts +10 -0
- package/dist/samples/SampleAPI.d.ts.map +1 -0
- package/dist/samples/SampleImporter.d.ts +11 -0
- package/dist/samples/SampleImporter.d.ts.map +1 -0
- package/dist/samples/SampleImporter.js +1 -0
- package/dist/sync-log/Commit.d.ts +1 -1
- package/dist/sync-log/Commit.d.ts.map +1 -1
- package/dist/sync-log/SyncLogReader.d.ts +2 -2
- package/dist/sync-log/SyncLogReader.d.ts.map +1 -1
- package/dist/sync-log/SyncLogReader.js +1 -1
- package/dist/sync-log/SyncLogWriter.d.ts +1 -1
- package/dist/sync-log/SyncLogWriter.d.ts.map +1 -1
- package/dist/workers.js +2 -2
- package/dist/workers.js.map +4 -4
- package/package.json +14 -14
- package/dist/Project.d.ts.map +0 -1
- package/dist/ProjectApi.d.ts.map +0 -1
- package/dist/ProjectEnv.d.ts +0 -5
- package/dist/ProjectEnv.d.ts.map +0 -1
- package/dist/ProjectMigration.d.ts.map +0 -1
- package/dist/Worklets.d.ts.map +0 -1
- package/dist/capture/CaptureManager.d.ts.map +0 -1
- package/dist/capture/RecordingContext.d.ts +0 -10
- package/dist/capture/RecordingContext.d.ts.map +0 -1
- /package/dist/{ProjectEnv.js → project/ProjectEnv.js} +0 -0
- /package/dist/{ProjectMigration.d.ts → project/ProjectMigration.d.ts} +0 -0
- /package/dist/{ProjectMigration.js → project/ProjectMigration.js} +0 -0
- /package/dist/{capture/RecordingContext.js → samples/SampleAPI.js} +0 -0
@@ -0,0 +1,109 @@
|
|
1
|
+
import { Arrays, asDefined, DefaultObservableValue, panic, RuntimeNotifier, tryCatch, UUID } from "@opendaw/lib-std";
|
2
|
+
import { network, Promises } from "@opendaw/lib-runtime";
|
3
|
+
const username = "openDAW";
|
4
|
+
const password = "prototype";
|
5
|
+
const base64Credentials = btoa(`${username}:${password}`);
|
6
|
+
const headers = {
|
7
|
+
method: "GET",
|
8
|
+
headers: { "Authorization": `Basic ${base64Credentials}` },
|
9
|
+
credentials: "include"
|
10
|
+
};
|
11
|
+
// Standard openDAW samples
|
12
|
+
export class OpenSampleAPI {
|
13
|
+
static ApiRoot = "https://api.opendaw.studio/samples";
|
14
|
+
static FileRoot = "https://assets.opendaw.studio/samples";
|
15
|
+
static fromAudioBuffer(buffer) {
|
16
|
+
return {
|
17
|
+
frames: Arrays.create(channel => buffer.getChannelData(channel), buffer.numberOfChannels),
|
18
|
+
sampleRate: buffer.sampleRate,
|
19
|
+
numberOfFrames: buffer.length,
|
20
|
+
numberOfChannels: buffer.numberOfChannels
|
21
|
+
};
|
22
|
+
}
|
23
|
+
async all() {
|
24
|
+
return Promises.retry(() => fetch(`${OpenSampleAPI.ApiRoot}/list.php`, headers)
|
25
|
+
.then(x => x.json(), () => []));
|
26
|
+
}
|
27
|
+
async get(uuid) {
|
28
|
+
const url = `${OpenSampleAPI.ApiRoot}/get.php?uuid=${UUID.toString(uuid)}`;
|
29
|
+
const sample = await Promises.retry(() => network.limitFetch(url, headers)
|
30
|
+
.then(x => x.json()))
|
31
|
+
.then(x => { if ("error" in x) {
|
32
|
+
return panic(x.error);
|
33
|
+
}
|
34
|
+
else {
|
35
|
+
return x;
|
36
|
+
} });
|
37
|
+
return Object.freeze({ ...sample, cloud: "cloud:openDAW" });
|
38
|
+
}
|
39
|
+
async load(context, uuid, progress) {
|
40
|
+
console.debug(`load ${UUID.toString(uuid)}`);
|
41
|
+
return this.get(uuid)
|
42
|
+
.then(({ uuid, name, bpm }) => Promises.retry(() => network
|
43
|
+
.limitFetch(`${OpenSampleAPI.FileRoot}/${uuid}`, headers))
|
44
|
+
.then(response => {
|
45
|
+
const total = parseInt(response.headers.get("Content-Length") ?? "0");
|
46
|
+
let loaded = 0;
|
47
|
+
return new Promise((resolve, reject) => {
|
48
|
+
const reader = asDefined(response.body, "No body in response").getReader();
|
49
|
+
const chunks = [];
|
50
|
+
const nextChunk = ({ done, value }) => {
|
51
|
+
if (done) {
|
52
|
+
resolve(new Blob(chunks).arrayBuffer());
|
53
|
+
}
|
54
|
+
else {
|
55
|
+
chunks.push(value);
|
56
|
+
loaded += value.length;
|
57
|
+
progress(loaded / total);
|
58
|
+
reader.read().then(nextChunk, reject);
|
59
|
+
}
|
60
|
+
};
|
61
|
+
reader.read().then(nextChunk, reject);
|
62
|
+
});
|
63
|
+
})
|
64
|
+
.then(arrayBuffer => context.decodeAudioData(arrayBuffer))
|
65
|
+
.then(audioBuffer => ([OpenSampleAPI.fromAudioBuffer(audioBuffer), {
|
66
|
+
uuid,
|
67
|
+
bpm,
|
68
|
+
name,
|
69
|
+
duration: audioBuffer.duration,
|
70
|
+
sample_rate: audioBuffer.sampleRate
|
71
|
+
}])));
|
72
|
+
}
|
73
|
+
async upload(arrayBuffer, metaData) {
|
74
|
+
const progress = new DefaultObservableValue(0.0);
|
75
|
+
const dialog = RuntimeNotifier.progress({ headline: "Uploading", progress });
|
76
|
+
const formData = new FormData();
|
77
|
+
Object.entries(metaData).forEach(([key, value]) => formData.set(key, String(value)));
|
78
|
+
const params = new URLSearchParams(location.search);
|
79
|
+
const accessKey = asDefined(params.get("access-key"), "Cannot upload without access-key.");
|
80
|
+
formData.set("key", accessKey);
|
81
|
+
formData.append("file", new Blob([arrayBuffer]));
|
82
|
+
console.log("upload data", Array.from(formData.entries()), arrayBuffer.byteLength);
|
83
|
+
const xhr = new XMLHttpRequest();
|
84
|
+
xhr.upload.addEventListener("progress", (event) => {
|
85
|
+
if (event.lengthComputable) {
|
86
|
+
progress.setValue(event.loaded / event.total);
|
87
|
+
}
|
88
|
+
});
|
89
|
+
xhr.onreadystatechange = () => {
|
90
|
+
if (xhr.readyState === 4) {
|
91
|
+
dialog.terminate();
|
92
|
+
if (xhr.status === 200) {
|
93
|
+
RuntimeNotifier.info({ message: xhr.responseText });
|
94
|
+
}
|
95
|
+
else {
|
96
|
+
const { status, value } = tryCatch(() => JSON.parse(xhr.responseText).message ?? "Unknown error message");
|
97
|
+
RuntimeNotifier.info({
|
98
|
+
headline: "Upload Failure",
|
99
|
+
message: status === "success" ? value : "Unknown error"
|
100
|
+
});
|
101
|
+
}
|
102
|
+
}
|
103
|
+
};
|
104
|
+
xhr.open("POST", `${OpenSampleAPI.ApiRoot}/upload.php`, true);
|
105
|
+
xhr.setRequestHeader("Authorization", `Basic ${base64Credentials}`);
|
106
|
+
xhr.send(formData);
|
107
|
+
}
|
108
|
+
allowsUpload() { return false; }
|
109
|
+
}
|
@@ -0,0 +1,10 @@
|
|
1
|
+
import { AudioData, Sample, SampleMetaData } from "@opendaw/studio-adapters";
|
2
|
+
import { Procedure, unitValue, UUID } from "@opendaw/lib-std";
|
3
|
+
export interface SampleAPI {
|
4
|
+
all(): Promise<ReadonlyArray<Sample>>;
|
5
|
+
get(uuid: UUID.Format): Promise<Sample>;
|
6
|
+
load(context: AudioContext, uuid: UUID.Format, progress: Procedure<unitValue>): Promise<[AudioData, Sample]>;
|
7
|
+
upload(arrayBuffer: ArrayBuffer, metaData: SampleMetaData): Promise<void>;
|
8
|
+
allowsUpload(): boolean;
|
9
|
+
}
|
10
|
+
//# sourceMappingURL=SampleAPI.d.ts.map
|
@@ -0,0 +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,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACvC,IAAI,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAA;IAC5G,MAAM,CAAC,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACzE,YAAY,IAAI,OAAO,CAAA;CAC1B"}
|
@@ -0,0 +1,11 @@
|
|
1
|
+
import { Progress, UUID } from "@opendaw/lib-std";
|
2
|
+
import { Sample } from "@opendaw/studio-adapters";
|
3
|
+
export type SampleImporter = {
|
4
|
+
importSample(sample: {
|
5
|
+
uuid: UUID.Format;
|
6
|
+
name: string;
|
7
|
+
arrayBuffer: ArrayBuffer;
|
8
|
+
progressHandler?: Progress.Handler;
|
9
|
+
}): Promise<Sample>;
|
10
|
+
};
|
11
|
+
//# sourceMappingURL=SampleImporter.d.ts.map
|
@@ -0,0 +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,MAAM,CAAC;QAClB,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"}
|
@@ -0,0 +1 @@
|
|
1
|
+
export {};
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Commit.d.ts","sourceRoot":"","sources":["../../src/sync-log/Commit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,cAAc,EAAwB,MAAM,kBAAkB,CAAA;AAC9E,OAAO,EAAC,MAAM,EAAC,MAAM,kBAAkB,CAAA;AACvC,OAAO,EAAC,OAAO,EAAC,MAAM,
|
1
|
+
{"version":3,"file":"Commit.d.ts","sourceRoot":"","sources":["../../src/sync-log/Commit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,cAAc,EAAwB,MAAM,kBAAkB,CAAA;AAC9E,OAAO,EAAC,MAAM,EAAC,MAAM,kBAAkB,CAAA;AACvC,OAAO,EAAC,OAAO,EAAC,MAAM,oBAAoB,CAAA;AAE1C,0BAAkB,UAAU;IAAG,IAAI,IAAA;IAAE,IAAI,IAAA;IAAE,OAAO,IAAA;IAAE,UAAU,IAAA;CAAE;AAEhE,qBAAa,MAAM;;IAiDK,QAAQ,CAAC,IAAI,EAAE,UAAU;IACzB,QAAQ,CAAC,QAAQ,EAAE,WAAW;IAC9B,QAAQ,CAAC,QAAQ,EAAE,WAAW;IAC9B,QAAQ,CAAC,OAAO,EAAE,WAAW;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM;IApDzC,MAAM,CAAC,QAAQ,CAAC,OAAO,KAAI;IAK3B,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAKrD,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;WAI5C,YAAY,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAejG,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM;IAmBjD,OAAO;IAMP,SAAS,IAAI,WAAW;IAYxB,QAAQ,IAAI,MAAM;CAGrB"}
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import { int } from "@opendaw/lib-std";
|
2
|
-
import { Project } from "../Project";
|
2
|
+
import { Project } from "../project/Project";
|
3
3
|
import { Commit } from "./Commit";
|
4
|
-
import { ProjectEnv } from "../ProjectEnv";
|
4
|
+
import { ProjectEnv } from "../project/ProjectEnv";
|
5
5
|
export declare class SyncLogReader {
|
6
6
|
static unwrap(env: ProjectEnv, buffer: ArrayBuffer): Promise<{
|
7
7
|
project: Project;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"SyncLogReader.d.ts","sourceRoot":"","sources":["../../src/sync-log/SyncLogReader.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,GAAG,EAAW,MAAM,kBAAkB,CAAA;AAG5E,OAAO,EAAC,OAAO,EAAC,MAAM,
|
1
|
+
{"version":3,"file":"SyncLogReader.d.ts","sourceRoot":"","sources":["../../src/sync-log/SyncLogReader.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,GAAG,EAAW,MAAM,kBAAkB,CAAA;AAG5E,OAAO,EAAC,OAAO,EAAC,MAAM,oBAAoB,CAAA;AAC1C,OAAO,EAAC,MAAM,EAAa,MAAM,UAAU,CAAA;AAC3C,OAAO,EAAC,UAAU,EAAC,MAAM,uBAAuB,CAAA;AAEhD,qBAAa,aAAa;WACT,MAAM,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC;QAC/D,OAAO,EAAE,OAAO,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,GAAG,CAAA;KAClB,CAAC;CA2CL"}
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import { assert, ByteArrayInput, Hash, tryCatch } from "@opendaw/lib-std";
|
2
2
|
import { Updates } from "@opendaw/lib-box";
|
3
3
|
import { Wait } from "@opendaw/lib-runtime";
|
4
|
-
import { Project } from "../Project";
|
4
|
+
import { Project } from "../project/Project";
|
5
5
|
import { Commit, CommitType } from "./Commit";
|
6
6
|
export class SyncLogReader {
|
7
7
|
static async unwrap(env, buffer) {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"SyncLogWriter.d.ts","sourceRoot":"","sources":["../../src/sync-log/SyncLogWriter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,QAAQ,EAAgB,UAAU,EAAC,MAAM,kBAAkB,CAAA;AAEpF,OAAO,EAAC,OAAO,EAAC,MAAM,
|
1
|
+
{"version":3,"file":"SyncLogWriter.d.ts","sourceRoot":"","sources":["../../src/sync-log/SyncLogWriter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,QAAQ,EAAgB,UAAU,EAAC,MAAM,kBAAkB,CAAA;AAEpF,OAAO,EAAC,OAAO,EAAC,MAAM,oBAAoB,CAAA;AAC1C,OAAO,EAAC,MAAM,EAAC,MAAM,UAAU,CAAA;AAE/B,qBAAa,aAAc,YAAW,UAAU;;IAC5C,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,aAAa;IAW/F,OAAO;IAWP,SAAS,IAAI,IAAI;CA6BpB"}
|