@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
package/dist/AudioDevices.js
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
import { Promises } from "@opendaw/lib-runtime";
|
2
|
-
import { Arrays,
|
2
|
+
import { Arrays, Errors } from "@opendaw/lib-std";
|
3
3
|
import { ConstrainDOM } from "@opendaw/lib-dom";
|
4
4
|
export class AudioDevices {
|
5
5
|
static async requestPermission() {
|
6
6
|
const { status, value: stream } = await Promises.tryCatch(navigator.mediaDevices.getUserMedia({ audio: true }));
|
7
7
|
if (status === "rejected") {
|
8
|
-
return warn("Could not request permission.");
|
8
|
+
return Errors.warn("Could not request permission.");
|
9
9
|
}
|
10
10
|
stream.getTracks().forEach(track => track.stop());
|
11
11
|
await this.updateInputList();
|
@@ -13,7 +13,7 @@ export class AudioDevices {
|
|
13
13
|
static async requestStream(constraints) {
|
14
14
|
const { status, value: stream, error } = await Promises.tryCatch(navigator.mediaDevices.getUserMedia({ audio: constraints }));
|
15
15
|
if (status === "rejected") {
|
16
|
-
return warn(
|
16
|
+
return Errors.warn(Errors.isOverconstrained(error) ?
|
17
17
|
error.constraint === "deviceId"
|
18
18
|
? `Could not find device with id: '${ConstrainDOM.resolveString(constraints.deviceId)}'`
|
19
19
|
: error.constraint
|
@@ -26,7 +26,7 @@ export class AudioDevices {
|
|
26
26
|
this.#inputs = Arrays.empty();
|
27
27
|
const { status, value: devices } = await Promises.tryCatch(navigator.mediaDevices.enumerateDevices());
|
28
28
|
if (status === "rejected") {
|
29
|
-
return warn("Could not enumerate devices.");
|
29
|
+
return Errors.warn("Could not enumerate devices.");
|
30
30
|
}
|
31
31
|
this.#inputs = devices.filter(device => device.kind === "audioinput" && device.deviceId !== "" && device.groupId !== "");
|
32
32
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"AudioOfflineRenderer.d.ts","sourceRoot":"","sources":["../src/AudioOfflineRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,
|
1
|
+
{"version":3,"file":"AudioOfflineRenderer.d.ts","sourceRoot":"","sources":["../src/AudioOfflineRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiC,GAAG,EAAE,MAAM,EAAmC,MAAM,kBAAkB,CAAA;AAI9G,OAAO,EAAC,wBAAwB,EAAC,MAAM,0BAA0B,CAAA;AACjE,OAAO,EAAC,OAAO,EAAC,MAAM,mBAAmB,CAAA;AACzC,OAAO,EAAC,WAAW,EAAC,MAAM,uBAAuB,CAAA;AAIjD,yBAAiB,oBAAoB,CAAC;IAC3B,MAAM,KAAK,GAAU,QAAQ,OAAO,EACf,MAAM,WAAW,EACjB,wBAAwB,MAAM,CAAC,wBAAwB,CAAC,EACxD,aAAY,GAAY,KAAG,OAAO,CAAC,IAAI,CA4BlE,CAAA;CAiDJ"}
|
@@ -1,9 +1,9 @@
|
|
1
|
-
import { DefaultObservableValue, panic, RuntimeNotifier, TimeSpan } from "@opendaw/lib-std";
|
1
|
+
import { DefaultObservableValue, Errors, panic, RuntimeNotifier, TimeSpan } from "@opendaw/lib-std";
|
2
2
|
import { PPQN } from "@opendaw/lib-dsp";
|
3
|
-
import { AnimationFrame,
|
3
|
+
import { AnimationFrame, Files } from "@opendaw/lib-dom";
|
4
4
|
import { Promises, Wait } from "@opendaw/lib-runtime";
|
5
5
|
import { ExportStemsConfiguration } from "@opendaw/studio-adapters";
|
6
|
-
import {
|
6
|
+
import { WavFile } from "./WavFile";
|
7
7
|
import { AudioWorklets } from "./AudioWorklets";
|
8
8
|
export var AudioOfflineRenderer;
|
9
9
|
(function (AudioOfflineRenderer) {
|
@@ -48,7 +48,7 @@ export var AudioOfflineRenderer;
|
|
48
48
|
if (!approved) {
|
49
49
|
return;
|
50
50
|
}
|
51
|
-
const wavFile =
|
51
|
+
const wavFile = WavFile.encodeFloats(buffer);
|
52
52
|
const suggestedName = `${meta.name}.wav`;
|
53
53
|
const saveResult = await Promises.tryCatch(Files.save(wavFile, { suggestedName }));
|
54
54
|
if (saveResult.status === "rejected" && !Errors.isAbort(saveResult.error)) {
|
@@ -63,7 +63,11 @@ export var AudioOfflineRenderer;
|
|
63
63
|
for (let stemIndex = 0; stemIndex < numStems; stemIndex++) {
|
64
64
|
const l = buffer.getChannelData(stemIndex * 2);
|
65
65
|
const r = buffer.getChannelData(stemIndex * 2 + 1);
|
66
|
-
const file =
|
66
|
+
const file = WavFile.encodeFloats({
|
67
|
+
channels: [l, r],
|
68
|
+
sampleRate: buffer.sampleRate,
|
69
|
+
numFrames: buffer.length
|
70
|
+
});
|
67
71
|
zip.file(`${trackNames[stemIndex]}.wav`, file, { binary: true });
|
68
72
|
}
|
69
73
|
const arrayBuffer = await zip.generateAsync({
|
package/dist/Engine.d.ts
CHANGED
@@ -14,9 +14,9 @@ export interface Engine extends Terminable {
|
|
14
14
|
panic(): void;
|
15
15
|
noteSignal(signal: NoteSignal): void;
|
16
16
|
subscribeNotes(observer: Observer<NoteSignal>): Subscription;
|
17
|
-
ignoreNoteRegion(uuid: UUID.
|
18
|
-
scheduleClipPlay(clipIds: ReadonlyArray<UUID.
|
19
|
-
scheduleClipStop(trackIds: ReadonlyArray<UUID.
|
17
|
+
ignoreNoteRegion(uuid: UUID.Bytes): void;
|
18
|
+
scheduleClipPlay(clipIds: ReadonlyArray<UUID.Bytes>): void;
|
19
|
+
scheduleClipStop(trackIds: ReadonlyArray<UUID.Bytes>): void;
|
20
20
|
subscribeClipNotification(observer: Observer<ClipNotification>): Subscription;
|
21
21
|
get position(): ObservableValue<ppqn>;
|
22
22
|
get isPlaying(): ObservableValue<boolean>;
|
@@ -26,7 +26,7 @@ export interface Engine extends Terminable {
|
|
26
26
|
get playbackTimestamp(): ObservableValue<ppqn>;
|
27
27
|
get countInBeatsTotal(): ObservableValue<int>;
|
28
28
|
get countInBeatsRemaining(): ObservableValue<number>;
|
29
|
-
get markerState(): ObservableValue<Nullable<[UUID.
|
29
|
+
get markerState(): ObservableValue<Nullable<[UUID.Bytes, int]>>;
|
30
30
|
get project(): Project;
|
31
31
|
}
|
32
32
|
//# sourceMappingURL=Engine.d.ts.map
|
package/dist/Engine.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Engine.d.ts","sourceRoot":"","sources":["../src/Engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,kBAAkB,CAAA;AACrC,OAAO,EAAC,GAAG,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAA;AACzG,OAAO,EAAC,gBAAgB,EAAE,UAAU,EAAC,MAAM,0BAA0B,CAAA;AACrE,OAAO,EAAC,OAAO,EAAC,MAAM,mBAAmB,CAAA;AAEzC,MAAM,WAAW,MAAO,SAAQ,UAAU;IACtC,IAAI,IAAI,IAAI,CAAA;IACZ,IAAI,IAAI,IAAI,CAAA;IACZ,WAAW,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAA;IACjC,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;IACtC,aAAa,IAAI,IAAI,CAAA;IACrB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACxB,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC,CAAA;IACxC,IAAI,IAAI,IAAI,CAAA;IACZ,KAAK,IAAI,IAAI,CAAA;IACb,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAAA;IACpC,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,YAAY,CAAA;IAC5D,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,
|
1
|
+
{"version":3,"file":"Engine.d.ts","sourceRoot":"","sources":["../src/Engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,kBAAkB,CAAA;AACrC,OAAO,EAAC,GAAG,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAA;AACzG,OAAO,EAAC,gBAAgB,EAAE,UAAU,EAAC,MAAM,0BAA0B,CAAA;AACrE,OAAO,EAAC,OAAO,EAAC,MAAM,mBAAmB,CAAA;AAEzC,MAAM,WAAW,MAAO,SAAQ,UAAU;IACtC,IAAI,IAAI,IAAI,CAAA;IACZ,IAAI,IAAI,IAAI,CAAA;IACZ,WAAW,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAA;IACjC,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;IACtC,aAAa,IAAI,IAAI,CAAA;IACrB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACxB,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC,CAAA;IACxC,IAAI,IAAI,IAAI,CAAA;IACZ,KAAK,IAAI,IAAI,CAAA;IACb,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAAA;IACpC,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,YAAY,CAAA;IAC5D,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;IACxC,gBAAgB,CAAC,OAAO,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAA;IAC1D,gBAAgB,CAAC,QAAQ,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAA;IAC3D,yBAAyB,CAAC,QAAQ,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GAAG,YAAY,CAAA;IAE7E,IAAI,QAAQ,IAAI,eAAe,CAAC,IAAI,CAAC,CAAA;IACrC,IAAI,SAAS,IAAI,eAAe,CAAC,OAAO,CAAC,CAAA;IACzC,IAAI,WAAW,IAAI,eAAe,CAAC,OAAO,CAAC,CAAA;IAC3C,IAAI,YAAY,IAAI,eAAe,CAAC,OAAO,CAAC,CAAA;IAC5C,IAAI,gBAAgB,IAAI,eAAe,CAAC,OAAO,CAAC,CAAA;IAChD,IAAI,iBAAiB,IAAI,eAAe,CAAC,IAAI,CAAC,CAAA;IAC9C,IAAI,iBAAiB,IAAI,eAAe,CAAC,GAAG,CAAC,CAAA;IAC7C,IAAI,qBAAqB,IAAI,eAAe,CAAC,MAAM,CAAC,CAAA;IACpD,IAAI,WAAW,IAAI,eAAe,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAA;IAC/D,IAAI,OAAO,IAAI,OAAO,CAAA;CACzB"}
|
package/dist/EngineFacade.d.ts
CHANGED
@@ -23,7 +23,7 @@ export declare class EngineFacade implements Engine {
|
|
23
23
|
get playbackTimestamp(): ObservableValue<ppqn>;
|
24
24
|
get countInBeatsTotal(): ObservableValue<int>;
|
25
25
|
get countInBeatsRemaining(): ObservableValue<int>;
|
26
|
-
get markerState(): DefaultObservableValue<Nullable<[UUID.
|
26
|
+
get markerState(): DefaultObservableValue<Nullable<[UUID.Bytes, int]>>;
|
27
27
|
get project(): Project;
|
28
28
|
isReady(): Promise<void>;
|
29
29
|
queryLoadingComplete(): Promise<boolean>;
|
@@ -31,10 +31,10 @@ export declare class EngineFacade implements Engine {
|
|
31
31
|
sampleRate(): number;
|
32
32
|
subscribeClipNotification(observer: Observer<ClipNotification>): Subscription;
|
33
33
|
subscribeNotes(observer: Observer<NoteSignal>): Subscription;
|
34
|
-
ignoreNoteRegion(uuid: UUID.
|
34
|
+
ignoreNoteRegion(uuid: UUID.Bytes): void;
|
35
35
|
noteSignal(signal: NoteSignal): void;
|
36
|
-
scheduleClipPlay(clipIds: ReadonlyArray<UUID.
|
37
|
-
scheduleClipStop(trackIds: ReadonlyArray<UUID.
|
36
|
+
scheduleClipPlay(clipIds: ReadonlyArray<UUID.Bytes>): void;
|
37
|
+
scheduleClipStop(trackIds: ReadonlyArray<UUID.Bytes>): void;
|
38
38
|
terminate(): void;
|
39
39
|
}
|
40
40
|
//# sourceMappingURL=EngineFacade.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"EngineFacade.d.ts","sourceRoot":"","sources":["../src/EngineFacade.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,sBAAsB,EACtB,GAAG,EACH,sBAAsB,EACtB,QAAQ,EACR,eAAe,EACf,QAAQ,EAER,YAAY,EAEZ,IAAI,EACP,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAC,IAAI,EAAC,MAAM,kBAAkB,CAAA;AACrC,OAAO,EAAC,gBAAgB,EAAE,UAAU,EAAC,MAAM,0BAA0B,CAAA;AACrE,OAAO,EAAC,MAAM,EAAC,MAAM,UAAU,CAAA;AAC/B,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAC,OAAO,EAAC,MAAM,mBAAmB,CAAA;AAEzC,qBAAa,YAAa,YAAW,MAAM;;;IAkBvC,UAAU,CAAC,OAAO,EAAE,aAAa;IAiBjC,aAAa,IAAI,IAAI;IAErB,cAAc,IAAI,IAAI;IAMtB,IAAI,IAAI,IAAI;IACZ,IAAI,CAAC,KAAK,GAAE,OAAe,GAAG,IAAI;IAClC,WAAW,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI;IACjC,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IACtC,aAAa,IAAI,IAAI;IAErB,IAAI,QAAQ,IAAI,eAAe,CAAC,IAAI,CAAC,CAAwB;IAC7D,IAAI,SAAS,IAAI,eAAe,CAAC,OAAO,CAAC,CAAyB;IAClE,IAAI,WAAW,IAAI,eAAe,CAAC,OAAO,CAAC,CAA2B;IACtE,IAAI,YAAY,IAAI,eAAe,CAAC,OAAO,CAAC,CAA4B;IACxE,IAAI,gBAAgB,IAAI,sBAAsB,CAAC,OAAO,CAAC,CAAgC;IACvF,IAAI,iBAAiB,IAAI,eAAe,CAAC,IAAI,CAAC,CAAiC;IAC/E,IAAI,iBAAiB,IAAI,eAAe,CAAC,GAAG,CAAC,CAAiC;IAC9E,IAAI,qBAAqB,IAAI,eAAe,CAAC,GAAG,CAAC,CAAqC;IACtF,IAAI,WAAW,IAAI,sBAAsB,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,
|
1
|
+
{"version":3,"file":"EngineFacade.d.ts","sourceRoot":"","sources":["../src/EngineFacade.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,sBAAsB,EACtB,GAAG,EACH,sBAAsB,EACtB,QAAQ,EACR,eAAe,EACf,QAAQ,EAER,YAAY,EAEZ,IAAI,EACP,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAC,IAAI,EAAC,MAAM,kBAAkB,CAAA;AACrC,OAAO,EAAC,gBAAgB,EAAE,UAAU,EAAC,MAAM,0BAA0B,CAAA;AACrE,OAAO,EAAC,MAAM,EAAC,MAAM,UAAU,CAAA;AAC/B,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAC,OAAO,EAAC,MAAM,mBAAmB,CAAA;AAEzC,qBAAa,YAAa,YAAW,MAAM;;;IAkBvC,UAAU,CAAC,OAAO,EAAE,aAAa;IAiBjC,aAAa,IAAI,IAAI;IAErB,cAAc,IAAI,IAAI;IAMtB,IAAI,IAAI,IAAI;IACZ,IAAI,CAAC,KAAK,GAAE,OAAe,GAAG,IAAI;IAClC,WAAW,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI;IACjC,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IACtC,aAAa,IAAI,IAAI;IAErB,IAAI,QAAQ,IAAI,eAAe,CAAC,IAAI,CAAC,CAAwB;IAC7D,IAAI,SAAS,IAAI,eAAe,CAAC,OAAO,CAAC,CAAyB;IAClE,IAAI,WAAW,IAAI,eAAe,CAAC,OAAO,CAAC,CAA2B;IACtE,IAAI,YAAY,IAAI,eAAe,CAAC,OAAO,CAAC,CAA4B;IACxE,IAAI,gBAAgB,IAAI,sBAAsB,CAAC,OAAO,CAAC,CAAgC;IACvF,IAAI,iBAAiB,IAAI,eAAe,CAAC,IAAI,CAAC,CAAiC;IAC/E,IAAI,iBAAiB,IAAI,eAAe,CAAC,GAAG,CAAC,CAAiC;IAC9E,IAAI,qBAAqB,IAAI,eAAe,CAAC,GAAG,CAAC,CAAqC;IACtF,IAAI,WAAW,IAAI,sBAAsB,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAA2B;IACjG,IAAI,OAAO,IAAI,OAAO,CAAmE;IAEzF,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IACxB,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC;IAGxC,KAAK,IAAI,IAAI;IACb,UAAU,IAAI,MAAM;IACpB,yBAAyB,CAAC,QAAQ,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GAAG,YAAY;IAG7E,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,YAAY;IAG5D,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI;IAGxC,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAGpC,gBAAgB,CAAC,OAAO,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI;IAG1D,gBAAgB,CAAC,QAAQ,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI;IAI3D,SAAS,IAAI,IAAI;CAIpB"}
|
package/dist/EngineWorklet.d.ts
CHANGED
@@ -22,15 +22,15 @@ export declare class EngineWorklet extends AudioWorkletNode implements Engine {
|
|
22
22
|
get position(): ObservableValue<ppqn>;
|
23
23
|
get playbackTimestamp(): MutableObservableValue<number>;
|
24
24
|
get metronomeEnabled(): MutableObservableValue<boolean>;
|
25
|
-
get markerState(): ObservableValue<Nullable<[UUID.
|
25
|
+
get markerState(): ObservableValue<Nullable<[UUID.Bytes, int]>>;
|
26
26
|
get project(): Project;
|
27
27
|
isReady(): Promise<void>;
|
28
28
|
queryLoadingComplete(): Promise<boolean>;
|
29
29
|
noteSignal(signal: NoteSignal): void;
|
30
30
|
subscribeNotes(observer: Observer<NoteSignal>): Subscription;
|
31
|
-
ignoreNoteRegion(uuid: UUID.
|
32
|
-
scheduleClipPlay(clipIds: ReadonlyArray<UUID.
|
33
|
-
scheduleClipStop(trackIds: ReadonlyArray<UUID.
|
31
|
+
ignoreNoteRegion(uuid: UUID.Bytes): void;
|
32
|
+
scheduleClipPlay(clipIds: ReadonlyArray<UUID.Bytes>): void;
|
33
|
+
scheduleClipStop(trackIds: ReadonlyArray<UUID.Bytes>): void;
|
34
34
|
subscribeClipNotification(observer: Observer<ClipNotification>): Subscription;
|
35
35
|
terminate(): void;
|
36
36
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"EngineWorklet.d.ts","sourceRoot":"","sources":["../src/EngineWorklet.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,GAAG,EACH,sBAAsB,EAEtB,QAAQ,EACR,eAAe,EACf,QAAQ,EAER,YAAY,EAGZ,IAAI,EACP,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAC,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAIrC,OAAO,EAEH,gBAAgB,EAOhB,wBAAwB,EACxB,UAAU,EACb,MAAM,0BAA0B,CAAA;AAEjC,OAAO,EAAC,OAAO,EAAC,MAAM,mBAAmB,CAAA;AACzC,OAAO,EAAC,MAAM,EAAC,MAAM,UAAU,CAAA;AAE/B,qBAAa,aAAc,SAAQ,gBAAiB,YAAW,MAAM;;IACjE,MAAM,CAAC,EAAE,EAAE,GAAG,CAAQ;IAEtB,QAAQ,CAAC,EAAE,SAAqB;gBAoBpB,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,OAAO,EAChB,mBAAmB,CAAC,EAAE,wBAAwB;IA8F1D,IAAI,IAAI,IAAI;IACZ,IAAI,CAAC,KAAK,GAAE,OAAe,GAAG,IAAI;IAClC,WAAW,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI;IACjC,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IACtC,aAAa,IAAI,IAAI;IACrB,KAAK,IAAI,IAAI;IAEb,IAAI,SAAS,IAAI,eAAe,CAAC,OAAO,CAAC,CAAyB;IAClE,IAAI,WAAW,IAAI,eAAe,CAAC,OAAO,CAAC,CAA2B;IACtE,IAAI,YAAY,IAAI,eAAe,CAAC,OAAO,CAAC,CAA4B;IACxE,IAAI,iBAAiB,IAAI,eAAe,CAAC,GAAG,CAAC,CAAiC;IAC9E,IAAI,qBAAqB,IAAI,eAAe,CAAC,MAAM,CAAC,CAAqC;IACzF,IAAI,QAAQ,IAAI,eAAe,CAAC,IAAI,CAAC,CAAwB;IAC7D,IAAI,iBAAiB,IAAI,sBAAsB,CAAC,MAAM,CAAC,CAAiC;IACxF,IAAI,gBAAgB,IAAI,sBAAsB,CAAC,OAAO,CAAC,CAAgC;IACvF,IAAI,WAAW,IAAI,eAAe,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,
|
1
|
+
{"version":3,"file":"EngineWorklet.d.ts","sourceRoot":"","sources":["../src/EngineWorklet.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,GAAG,EACH,sBAAsB,EAEtB,QAAQ,EACR,eAAe,EACf,QAAQ,EAER,YAAY,EAGZ,IAAI,EACP,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAC,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAIrC,OAAO,EAEH,gBAAgB,EAOhB,wBAAwB,EACxB,UAAU,EACb,MAAM,0BAA0B,CAAA;AAEjC,OAAO,EAAC,OAAO,EAAC,MAAM,mBAAmB,CAAA;AACzC,OAAO,EAAC,MAAM,EAAC,MAAM,UAAU,CAAA;AAE/B,qBAAa,aAAc,SAAQ,gBAAiB,YAAW,MAAM;;IACjE,MAAM,CAAC,EAAE,EAAE,GAAG,CAAQ;IAEtB,QAAQ,CAAC,EAAE,SAAqB;gBAoBpB,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,OAAO,EAChB,mBAAmB,CAAC,EAAE,wBAAwB;IA8F1D,IAAI,IAAI,IAAI;IACZ,IAAI,CAAC,KAAK,GAAE,OAAe,GAAG,IAAI;IAClC,WAAW,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI;IACjC,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IACtC,aAAa,IAAI,IAAI;IACrB,KAAK,IAAI,IAAI;IAEb,IAAI,SAAS,IAAI,eAAe,CAAC,OAAO,CAAC,CAAyB;IAClE,IAAI,WAAW,IAAI,eAAe,CAAC,OAAO,CAAC,CAA2B;IACtE,IAAI,YAAY,IAAI,eAAe,CAAC,OAAO,CAAC,CAA4B;IACxE,IAAI,iBAAiB,IAAI,eAAe,CAAC,GAAG,CAAC,CAAiC;IAC9E,IAAI,qBAAqB,IAAI,eAAe,CAAC,MAAM,CAAC,CAAqC;IACzF,IAAI,QAAQ,IAAI,eAAe,CAAC,IAAI,CAAC,CAAwB;IAC7D,IAAI,iBAAiB,IAAI,sBAAsB,CAAC,MAAM,CAAC,CAAiC;IACxF,IAAI,gBAAgB,IAAI,sBAAsB,CAAC,OAAO,CAAC,CAAgC;IACvF,IAAI,WAAW,IAAI,eAAe,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAA2B;IAC1F,IAAI,OAAO,IAAI,OAAO,CAAuB;IAE7C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IACxB,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC;IACxC,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IACpC,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,YAAY;IAC5D,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI;IACxC,gBAAgB,CAAC,OAAO,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI;IAI1D,gBAAgB,CAAC,QAAQ,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI;IAG3D,yBAAyB,CAAC,QAAQ,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GAAG,YAAY;IAQ7E,SAAS,IAAI,IAAI;CAIpB"}
|
@@ -3,7 +3,7 @@ import { Peaks } from "@opendaw/lib-fusion";
|
|
3
3
|
import { AudioData, RingBuffer, SampleLoader, SampleLoaderState } from "@opendaw/studio-adapters";
|
4
4
|
export declare class RecordingWorklet extends AudioWorkletNode implements Terminable, SampleLoader {
|
5
5
|
#private;
|
6
|
-
readonly uuid: UUID.
|
6
|
+
readonly uuid: UUID.Bytes;
|
7
7
|
constructor(context: BaseAudioContext, config: RingBuffer.Config, outputLatency: number);
|
8
8
|
own<T extends Terminable>(terminable: T): T;
|
9
9
|
limit(count: int): void;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"RecordingWorklet.d.ts","sourceRoot":"","sources":["../src/RecordingWorklet.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,GAAG,EAEH,QAAQ,EACR,MAAM,EAEN,YAAY,EACZ,UAAU,EAEV,IAAI,EACP,MAAM,kBAAkB,CAAA;AAEzB,OAAO,EAAC,KAAK,EAAc,MAAM,qBAAqB,CAAA;AACtD,OAAO,EACH,SAAS,EAET,UAAU,EACV,YAAY,EACZ,iBAAiB,EAEpB,MAAM,0BAA0B,CAAA;AAMjC,qBAAa,gBAAiB,SAAQ,gBAAiB,YAAW,UAAU,EAAE,YAAY;;IAGtF,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,
|
1
|
+
{"version":3,"file":"RecordingWorklet.d.ts","sourceRoot":"","sources":["../src/RecordingWorklet.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,GAAG,EAEH,QAAQ,EACR,MAAM,EAEN,YAAY,EACZ,UAAU,EAEV,IAAI,EACP,MAAM,kBAAkB,CAAA;AAEzB,OAAO,EAAC,KAAK,EAAc,MAAM,qBAAqB,CAAA;AACtD,OAAO,EACH,SAAS,EAET,UAAU,EACV,YAAY,EACZ,iBAAiB,EAEpB,MAAM,0BAA0B,CAAA;AAMjC,qBAAa,gBAAiB,SAAQ,gBAAiB,YAAW,UAAU,EAAE,YAAY;;IAGtF,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAkB;gBAa/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM;IA2BvF,GAAG,CAAC,CAAC,SAAS,UAAU,EAAE,UAAU,EAAE,CAAC,GAAG,CAAC;IAE3C,KAAK,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI;IAEvB,aAAa,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI;IAE/B,IAAI,cAAc,IAAI,GAAG,CAA6C;IACtE,IAAI,IAAI,IAAI,MAAM,CAAC,SAAS,CAAC,CAAoB;IACjD,IAAI,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,CAA6E;IACvG,IAAI,KAAK,IAAI,iBAAiB,CAAqB;IAEnD,UAAU,IAAI,IAAI;IAElB,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,iBAAiB,CAAC,GAAG,YAAY;IAQ9D,SAAS,IAAI,IAAI;IAMjB,QAAQ,IAAI,MAAM;CAkCrB"}
|
package/dist/RecordingWorklet.js
CHANGED
@@ -89,7 +89,7 @@ export class RecordingWorklet extends AudioWorkletNode {
|
|
89
89
|
const bpm = BPMTools.detect(frames[0], sample_rate);
|
90
90
|
const duration = totalSamples / sample_rate;
|
91
91
|
const meta = { name: "Recording", bpm, sample_rate, duration };
|
92
|
-
await SampleStorage.
|
92
|
+
await SampleStorage.saveSample(this.uuid, audioData, peaks, meta);
|
93
93
|
this.#setState({ type: "loaded" });
|
94
94
|
this.terminate();
|
95
95
|
}
|
@@ -0,0 +1,10 @@
|
|
1
|
+
export declare namespace WavFile {
|
2
|
+
type Audio = {
|
3
|
+
channels: ReadonlyArray<Float32Array>;
|
4
|
+
sampleRate: number;
|
5
|
+
numFrames: number;
|
6
|
+
};
|
7
|
+
const decodeFloats: (buffer: ArrayBuffer) => Audio;
|
8
|
+
const encodeFloats: (audio: Audio | AudioBuffer) => ArrayBuffer;
|
9
|
+
}
|
10
|
+
//# sourceMappingURL=WavFile.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"WavFile.d.ts","sourceRoot":"","sources":["../src/WavFile.ts"],"names":[],"mappings":"AAEA,yBAAiB,OAAO,CAAC;IAMrB,KAAY,KAAK,GAAG;QAChB,QAAQ,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;QACtC,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAA;KACpB,CAAA;IAEM,MAAM,YAAY,GAAI,QAAQ,WAAW,KAAG,KA2ClD,CAAA;IAEM,MAAM,YAAY,GAAI,OAAO,KAAK,GAAG,WAAW,KAAG,WAuCzD,CAAA;CACJ"}
|
package/dist/WavFile.js
ADDED
@@ -0,0 +1,94 @@
|
|
1
|
+
import { Arrays, panic } from "@opendaw/lib-std";
|
2
|
+
export var WavFile;
|
3
|
+
(function (WavFile) {
|
4
|
+
const MAGIC_RIFF = 0x46464952;
|
5
|
+
const MAGIC_WAVE = 0x45564157;
|
6
|
+
const MAGIC_FMT = 0x20746d66;
|
7
|
+
const MAGIC_DATA = 0x61746164;
|
8
|
+
WavFile.decodeFloats = (buffer) => {
|
9
|
+
const view = new DataView(buffer);
|
10
|
+
if (view.getUint32(0, true) !== MAGIC_RIFF
|
11
|
+
|| view.getUint32(8, true) !== MAGIC_WAVE) {
|
12
|
+
return panic("Not a RIFF/WAVE file");
|
13
|
+
}
|
14
|
+
let fmtOffset = -1;
|
15
|
+
let dataOffset = -1;
|
16
|
+
let dataSize = 0;
|
17
|
+
for (let o = 12; o + 8 <= view.byteLength;) {
|
18
|
+
const id = view.getUint32(o, true);
|
19
|
+
const size = view.getUint32(o + 4, true);
|
20
|
+
const next = o + 8 + ((size + 1) & ~1);
|
21
|
+
if (id === MAGIC_FMT)
|
22
|
+
fmtOffset = o + 8;
|
23
|
+
if (id === MAGIC_DATA) {
|
24
|
+
dataOffset = o + 8;
|
25
|
+
dataSize = size;
|
26
|
+
}
|
27
|
+
o = next;
|
28
|
+
}
|
29
|
+
if (fmtOffset < 0 || dataOffset < 0) {
|
30
|
+
return panic("Missing fmt or data chunk");
|
31
|
+
}
|
32
|
+
const audioFormat = view.getUint16(fmtOffset, true); // 3 = IEEE float
|
33
|
+
const numChannels = view.getUint16(fmtOffset + 2, true);
|
34
|
+
const sampleRate = view.getUint32(fmtOffset + 4, true);
|
35
|
+
const blockAlign = view.getUint16(fmtOffset + 12, true);
|
36
|
+
const bitsPerSample = view.getUint16(fmtOffset + 14, true);
|
37
|
+
if (audioFormat !== 3 || bitsPerSample !== 32) {
|
38
|
+
return panic("Expected 32-bit float WAV (format 3)");
|
39
|
+
}
|
40
|
+
if (blockAlign !== numChannels * 4) {
|
41
|
+
return panic("Invalid block alignment");
|
42
|
+
}
|
43
|
+
const numFrames = Math.floor(dataSize / blockAlign);
|
44
|
+
const interleaved = new Float32Array(buffer, dataOffset, numFrames * numChannels);
|
45
|
+
const channels = Arrays.create(() => new Float32Array(numFrames), numChannels);
|
46
|
+
for (let i = 0, w = 0; i < numFrames; i++) {
|
47
|
+
for (let c = 0; c < numChannels; c++) {
|
48
|
+
channels[c][i] = interleaved[w++];
|
49
|
+
}
|
50
|
+
}
|
51
|
+
return { channels, sampleRate, numFrames };
|
52
|
+
};
|
53
|
+
WavFile.encodeFloats = (audio) => {
|
54
|
+
const bytesPerChannel = Float32Array.BYTES_PER_ELEMENT;
|
55
|
+
const sampleRate = audio.sampleRate;
|
56
|
+
let numFrames;
|
57
|
+
let numberOfChannels;
|
58
|
+
let channels;
|
59
|
+
if (audio instanceof AudioBuffer) {
|
60
|
+
channels = Arrays.create(index => audio.getChannelData(index), audio.numberOfChannels);
|
61
|
+
numFrames = audio.length;
|
62
|
+
numberOfChannels = audio.numberOfChannels;
|
63
|
+
}
|
64
|
+
else {
|
65
|
+
channels = audio.channels;
|
66
|
+
numFrames = audio.numFrames;
|
67
|
+
numberOfChannels = audio.channels.length;
|
68
|
+
}
|
69
|
+
const size = 44 + numFrames * numberOfChannels * bytesPerChannel;
|
70
|
+
const buf = new ArrayBuffer(size);
|
71
|
+
const view = new DataView(buf);
|
72
|
+
view.setUint32(0, MAGIC_RIFF, true);
|
73
|
+
view.setUint32(4, size - 8, true);
|
74
|
+
view.setUint32(8, MAGIC_WAVE, true);
|
75
|
+
view.setUint32(12, MAGIC_FMT, true);
|
76
|
+
view.setUint32(16, 16, true); // chunk length
|
77
|
+
view.setUint16(20, 3, true); // compression
|
78
|
+
view.setUint16(22, numberOfChannels, true);
|
79
|
+
view.setUint32(24, sampleRate, true);
|
80
|
+
view.setUint32(28, sampleRate * numberOfChannels * bytesPerChannel, true);
|
81
|
+
view.setUint16(32, numberOfChannels * bytesPerChannel, true);
|
82
|
+
view.setUint16(34, 8 * bytesPerChannel, true);
|
83
|
+
view.setUint32(36, MAGIC_DATA, true);
|
84
|
+
view.setUint32(40, numberOfChannels * numFrames * bytesPerChannel, true);
|
85
|
+
let w = 44;
|
86
|
+
for (let i = 0; i < numFrames; ++i) {
|
87
|
+
for (let j = 0; j < numberOfChannels; ++j) {
|
88
|
+
view.setFloat32(w, channels[j][i], true);
|
89
|
+
w += bytesPerChannel;
|
90
|
+
}
|
91
|
+
}
|
92
|
+
return view.buffer;
|
93
|
+
};
|
94
|
+
})(WavFile || (WavFile = {}));
|
package/dist/WorkerAgents.d.ts
CHANGED
@@ -2,7 +2,7 @@ import { Option } from "@opendaw/lib-std";
|
|
2
2
|
import type { OpfsProtocol, SamplePeakProtocol } from "@opendaw/lib-fusion";
|
3
3
|
import { Messenger } from "@opendaw/lib-runtime";
|
4
4
|
export declare class WorkerAgents {
|
5
|
-
static install(): void
|
5
|
+
static install(): Promise<void>;
|
6
6
|
static messenger: Option<Messenger>;
|
7
7
|
static get Peak(): SamplePeakProtocol;
|
8
8
|
static get Opfs(): OpfsProtocol;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"WorkerAgents.d.ts","sourceRoot":"","sources":["../src/WorkerAgents.ts"],"names":[],"mappings":"AAAA,OAAO,
|
1
|
+
{"version":3,"file":"WorkerAgents.d.ts","sourceRoot":"","sources":["../src/WorkerAgents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,MAAM,EAAY,MAAM,kBAAkB,CAAA;AACjF,OAAO,KAAK,EAAC,YAAY,EAAE,kBAAkB,EAAC,MAAM,qBAAqB,CAAA;AACzE,OAAO,EAAe,SAAS,EAAC,MAAM,sBAAsB,CAAA;AAI5D,qBAAa,YAAY;WACR,OAAO;IAgBpB,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,CAAc;IAGjD,MAAM,KAAK,IAAI,IAAI,kBAAkB,CAapC;IAGD,MAAM,KAAK,IAAI,IAAI,YAAY,CAS9B;CACJ"}
|
package/dist/WorkerAgents.js
CHANGED
@@ -7,12 +7,24 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
7
7
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
8
8
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
9
9
|
};
|
10
|
-
import { Lazy, Option } from "@opendaw/lib-std";
|
10
|
+
import { assert, Lazy, Option } from "@opendaw/lib-std";
|
11
11
|
import { Communicator, Messenger } from "@opendaw/lib-runtime";
|
12
12
|
const WorkerUrl = new URL("./workers.js", import.meta.url);
|
13
13
|
export class WorkerAgents {
|
14
|
-
static install() {
|
15
|
-
this.messenger
|
14
|
+
static async install() {
|
15
|
+
assert(this.messenger.isEmpty(), "WorkerAgents are already installed");
|
16
|
+
console.debug("WorkerAgents", WorkerUrl);
|
17
|
+
const message = Messenger.for(new Worker(WorkerUrl, { type: "module" }));
|
18
|
+
this.messenger = Option.wrap(message);
|
19
|
+
const { resolve, promise } = Promise.withResolvers();
|
20
|
+
const subscription = message.channel("initialize").subscribe(data => {
|
21
|
+
if (data === "ready") {
|
22
|
+
console.debug("WorkerAgents ready");
|
23
|
+
resolve();
|
24
|
+
subscription.terminate();
|
25
|
+
}
|
26
|
+
});
|
27
|
+
return promise;
|
16
28
|
}
|
17
29
|
static messenger = Option.None;
|
18
30
|
static get Peak() {
|
@@ -9,7 +9,7 @@ export declare abstract class Capture<BOX extends CaptureBox = CaptureBox> imple
|
|
9
9
|
abstract get deviceLabel(): Option<string>;
|
10
10
|
abstract prepareRecording(): Promise<void>;
|
11
11
|
abstract startRecording(): Terminable;
|
12
|
-
get uuid(): UUID.
|
12
|
+
get uuid(): UUID.Bytes;
|
13
13
|
get manager(): CaptureDevices;
|
14
14
|
get audioUnitBox(): AudioUnitBox;
|
15
15
|
get captureBox(): BOX;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Capture.d.ts","sourceRoot":"","sources":["../../src/capture/Capture.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,sBAAsB,EACtB,MAAM,EACN,UAAU,EAEV,IAAI,EACP,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAC,YAAY,EAAC,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAC,UAAU,EAAC,MAAM,0BAA0B,CAAA;AACnD,OAAO,EAAC,cAAc,EAAC,MAAM,kBAAkB,CAAA;AAE/C,8BAAsB,OAAO,CAAC,GAAG,SAAS,UAAU,GAAG,UAAU,CAAE,YAAW,UAAU;;IAUpF,SAAS,aAAa,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG;IAmB1F,QAAQ,KAAK,KAAK,IAAI,MAAM,CAAA;IAC5B,QAAQ,KAAK,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC,CAAA;IAC1C,QAAQ,CAAC,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAC1C,QAAQ,CAAC,cAAc,IAAI,UAAU;IAErC,IAAI,IAAI,IAAI,IAAI,CAAC,
|
1
|
+
{"version":3,"file":"Capture.d.ts","sourceRoot":"","sources":["../../src/capture/Capture.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,sBAAsB,EACtB,MAAM,EACN,UAAU,EAEV,IAAI,EACP,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAC,YAAY,EAAC,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAC,UAAU,EAAC,MAAM,0BAA0B,CAAA;AACnD,OAAO,EAAC,cAAc,EAAC,MAAM,kBAAkB,CAAA;AAE/C,8BAAsB,OAAO,CAAC,GAAG,SAAS,UAAU,GAAG,UAAU,CAAE,YAAW,UAAU;;IAUpF,SAAS,aAAa,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG;IAmB1F,QAAQ,KAAK,KAAK,IAAI,MAAM,CAAA;IAC5B,QAAQ,KAAK,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC,CAAA;IAC1C,QAAQ,CAAC,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAC1C,QAAQ,CAAC,cAAc,IAAI,UAAU;IAErC,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAyC;IAC/D,IAAI,OAAO,IAAI,cAAc,CAAuB;IACpD,IAAI,YAAY,IAAI,YAAY,CAA4B;IAC5D,IAAI,UAAU,IAAI,GAAG,CAA0B;IAC/C,IAAI,KAAK,IAAI,sBAAsB,CAAC,OAAO,CAAC,CAAqB;IACjE,IAAI,QAAQ,IAAI,sBAAsB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAwB;IAE9E,GAAG,CAAC,CAAC,SAAS,UAAU,EAAE,UAAU,EAAE,CAAC,GAAG,CAAC;IAC3C,MAAM,CAAC,CAAC,SAAS,UAAU,EAAE,GAAG,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI;IACpE,SAAS,IAAI,IAAI;CACpB"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"CaptureAudio.d.ts","sourceRoot":"","sources":["../../src/capture/CaptureAudio.ts"],"names":[],"mappings":"AAAA,OAAO,EAKH,uBAAuB,EACvB,MAAM,EAEN,UAAU,
|
1
|
+
{"version":3,"file":"CaptureAudio.d.ts","sourceRoot":"","sources":["../../src/capture/CaptureAudio.ts"],"names":[],"mappings":"AAAA,OAAO,EAKH,uBAAuB,EACvB,MAAM,EAEN,UAAU,EACb,MAAM,kBAAkB,CAAA;AAEzB,OAAO,EAAC,YAAY,EAAE,eAAe,EAAC,MAAM,uBAAuB,CAAA;AACnE,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AACjC,OAAO,EAAC,cAAc,EAAC,MAAM,kBAAkB,CAAA;AAI/C,qBAAa,YAAa,SAAQ,OAAO,CAAC,eAAe,CAAC;;gBAQ1C,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,eAAe;IA4BjG,IAAI,MAAM,IAAI,MAAM,CAAsB;IAE1C,IAAI,MAAM,IAAI,uBAAuB,CAAC,WAAW,CAAC,CAAsB;IAExE,IAAI,cAAc,IAAI,MAAM,CAAC,MAAM,CAAC,CAEnC;IAED,IAAI,KAAK,IAAI,MAAM,CAAsE;IAEzF,IAAI,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC,CAA+D;IAEhG,IAAI,gBAAgB,IAAI,MAAM,CAAC,gBAAgB,CAAC,CAE/C;IAEK,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBvC,cAAc,IAAI,UAAU;CA+D/B"}
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import {
|
1
|
+
import { Errors, isDefined, isUndefined, MutableObservableOption, Option, RuntimeNotifier, Terminable } from "@opendaw/lib-std";
|
2
2
|
import { Promises } from "@opendaw/lib-runtime";
|
3
3
|
import { Capture } from "./Capture";
|
4
4
|
import { RecordAudio } from "./RecordAudio";
|
@@ -11,7 +11,7 @@ export class CaptureAudio extends Capture {
|
|
11
11
|
constructor(manager, audioUnitBox, captureAudioBox) {
|
12
12
|
super(manager, audioUnitBox, captureAudioBox);
|
13
13
|
this.#stream = new MutableObservableOption();
|
14
|
-
this.#streamGenerator = Promises.
|
14
|
+
this.#streamGenerator = Promises.sequentialize(() => this.#updateStream());
|
15
15
|
this.ownAll(captureAudioBox.requestChannels.catchupAndSubscribe(owner => {
|
16
16
|
const channels = owner.getValue();
|
17
17
|
this.#requestChannels = channels === 1 || channels === 2 ? Option.wrap(channels) : Option.None;
|
@@ -50,7 +50,7 @@ export class CaptureAudio extends Capture {
|
|
50
50
|
cancelText: "Cancel"
|
51
51
|
});
|
52
52
|
if (!approved) {
|
53
|
-
return
|
53
|
+
return Promise.reject("Recording cancelled");
|
54
54
|
}
|
55
55
|
}
|
56
56
|
return this.#streamGenerator();
|
@@ -110,7 +110,7 @@ export class CaptureAudio extends Capture {
|
|
110
110
|
}
|
111
111
|
else {
|
112
112
|
stream.getAudioTracks().forEach(track => track.stop());
|
113
|
-
return warn(`Could not find audio device with id: '${deviceId} in ${gotDeviceId}'`);
|
113
|
+
return Errors.warn(`Could not find audio device with id: '${deviceId} in ${gotDeviceId}'`);
|
114
114
|
}
|
115
115
|
});
|
116
116
|
}
|
@@ -5,7 +5,7 @@ export declare class CaptureDevices implements Terminable {
|
|
5
5
|
#private;
|
6
6
|
constructor(project: Project);
|
7
7
|
get project(): Project;
|
8
|
-
get(uuid: UUID.
|
8
|
+
get(uuid: UUID.Bytes): Option<Capture>;
|
9
9
|
setArm(subject: Capture, exclusive: boolean): void;
|
10
10
|
filterArmed(): ReadonlyArray<Capture>;
|
11
11
|
terminate(): void;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"CaptureDevices.d.ts","sourceRoot":"","sources":["../../src/capture/CaptureDevices.ts"],"names":[],"mappings":"AAAA,OAAO,
|
1
|
+
{"version":3,"file":"CaptureDevices.d.ts","sourceRoot":"","sources":["../../src/capture/CaptureDevices.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiC,MAAM,EAA2B,UAAU,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAElH,OAAO,EAAC,OAAO,EAAC,MAAM,oBAAoB,CAAA;AAC1C,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AAIjC,qBAAa,cAAe,YAAW,UAAU;;gBAKjC,OAAO,EAAE,OAAO;IAiB5B,IAAI,OAAO,IAAI,OAAO,CAAuB;IAE7C,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC;IAEtC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI;IAUlD,WAAW,IAAI,aAAa,CAAC,OAAO,CAAC;IAKrC,SAAS,IAAI,IAAI;CAKpB"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"CaptureMidi.d.ts","sourceRoot":"","sources":["../../src/capture/CaptureMidi.ts"],"names":[],"mappings":"AAAA,OAAO,
|
1
|
+
{"version":3,"file":"CaptureMidi.d.ts","sourceRoot":"","sources":["../../src/capture/CaptureMidi.ts"],"names":[],"mappings":"AAAA,OAAO,EAQH,QAAQ,EACR,MAAM,EACN,YAAY,EACZ,UAAU,EACb,MAAM,kBAAkB,CAAA;AAIzB,OAAO,EAAC,YAAY,EAAE,cAAc,EAAC,MAAM,uBAAuB,CAAA;AAClE,OAAO,EAAC,UAAU,EAAC,MAAM,0BAA0B,CAAA;AAEnD,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AACjC,OAAO,EAAC,cAAc,EAAC,MAAM,kBAAkB,CAAA;AAI/C,qBAAa,WAAY,SAAQ,OAAO,CAAC,cAAc,CAAC;;gBAOxC,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc;IA8B/F,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAEhC,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,YAAY;IAE5D,IAAI,KAAK,IAAI,MAAM,CAgBlB;IAED,IAAI,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC,CAIhC;IAEK,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAuBvC,cAAc,IAAI,UAAU;CAgD/B"}
|
@@ -1,11 +1,12 @@
|
|
1
|
-
import { assert, isDefined, isUndefined, Notifier, Option, Terminable
|
1
|
+
import { assert, Errors, isDefined, isUndefined, Notifier, Option, Terminable } from "@opendaw/lib-std";
|
2
2
|
import { Events } from "@opendaw/lib-dom";
|
3
3
|
import { MidiData } from "@opendaw/lib-midi";
|
4
4
|
import { Promises } from "@opendaw/lib-runtime";
|
5
5
|
import { NoteSignal } from "@opendaw/studio-adapters";
|
6
|
-
import { MidiDevices } from "../MidiDevices";
|
6
|
+
import { MidiDevices } from "../midi/MidiDevices";
|
7
7
|
import { Capture } from "./Capture";
|
8
8
|
import { RecordMidi } from "./RecordMidi";
|
9
|
+
var warn = Errors.warn;
|
9
10
|
export class CaptureMidi extends Capture {
|
10
11
|
#streamGenerator;
|
11
12
|
#notifier = new Notifier();
|
@@ -13,7 +14,7 @@ export class CaptureMidi extends Capture {
|
|
13
14
|
#stream = Option.None;
|
14
15
|
constructor(manager, audioUnitBox, captureMidiBox) {
|
15
16
|
super(manager, audioUnitBox, captureMidiBox);
|
16
|
-
this.#streamGenerator = Promises.
|
17
|
+
this.#streamGenerator = Promises.sequentialize(() => this.#updateStream());
|
17
18
|
this.ownAll(captureMidiBox.channel.catchupAndSubscribe(async (owner) => {
|
18
19
|
const channel = owner.getValue();
|
19
20
|
this.#filterChannel = channel >= 0 ? Option.wrap(channel) : Option.None;
|
@@ -66,12 +67,12 @@ export class CaptureMidi extends Capture {
|
|
66
67
|
await MidiDevices.requestPermission();
|
67
68
|
}
|
68
69
|
else {
|
69
|
-
return warn("MIDI not available");
|
70
|
+
return Errors.warn("MIDI not available");
|
70
71
|
}
|
71
72
|
}
|
72
73
|
const optInputs = MidiDevices.inputs();
|
73
74
|
if (optInputs.isEmpty()) {
|
74
|
-
return warn("MIDI not available");
|
75
|
+
return Errors.warn("MIDI not available");
|
75
76
|
}
|
76
77
|
const inputs = optInputs.unwrap();
|
77
78
|
if (inputs.length === 0) {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Recording.d.ts","sourceRoot":"","sources":["../../src/capture/Recording.ts"],"names":[],"mappings":"AAAA,OAAO,
|
1
|
+
{"version":3,"file":"Recording.d.ts","sourceRoot":"","sources":["../../src/capture/Recording.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuC,UAAU,EAAa,MAAM,kBAAkB,CAAA;AAK7F,OAAO,EAAC,OAAO,EAAC,MAAM,oBAAoB,CAAA;AAE1C,qBAAa,SAAS;;IAClB,MAAM,KAAK,WAAW,IAAI,OAAO,CAA2B;WAE/C,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IA8D3E,OAAO;CACV"}
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import { asInstanceOf, assert, Option, Terminable, Terminator
|
1
|
+
import { asInstanceOf, assert, Errors, Option, Terminable, Terminator } from "@opendaw/lib-std";
|
2
2
|
import { Promises } from "@opendaw/lib-runtime";
|
3
3
|
import { AudioUnitBox } from "@opendaw/studio-boxes";
|
4
4
|
import { AudioUnitType } from "@opendaw/studio-enums";
|
@@ -17,12 +17,12 @@ export class Recording {
|
|
17
17
|
const captures = captureDevices.filterArmed();
|
18
18
|
if (captures.length === 0) {
|
19
19
|
this.#isRecording = false;
|
20
|
-
return warn("No track is armed for Recording");
|
20
|
+
return Errors.warn("No track is armed for Recording");
|
21
21
|
}
|
22
22
|
const { status, error } = await Promises.tryCatch(Promise.all(captures.map(capture => capture.prepareRecording())));
|
23
23
|
if (status === "rejected") {
|
24
24
|
this.#isRecording = false;
|
25
|
-
return warn(String(error));
|
25
|
+
return Errors.warn(String(error));
|
26
26
|
}
|
27
27
|
terminator.ownAll(...captures.map(capture => capture.startRecording()));
|
28
28
|
engine.startRecording(countIn);
|
@@ -0,0 +1,10 @@
|
|
1
|
+
import { CloudHandler } from "./CloudHandler";
|
2
|
+
import { CloudService } from "./CloudService";
|
3
|
+
export declare class CloudAuthManager {
|
4
|
+
#private;
|
5
|
+
static create(): CloudAuthManager;
|
6
|
+
readonly id: number;
|
7
|
+
private constructor();
|
8
|
+
getHandler(service: CloudService): Promise<CloudHandler>;
|
9
|
+
}
|
10
|
+
//# sourceMappingURL=CloudAuthManager.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"CloudAuthManager.d.ts","sourceRoot":"","sources":["../../src/clouds/CloudAuthManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAA;AAE3C,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAA;AAE3C,qBAAa,gBAAgB;;IACzB,MAAM,CAAC,MAAM,IAAI,gBAAgB;IAqBjC,QAAQ,CAAC,EAAE,SAAyB;IAIpC,OAAO;IAED,UAAU,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;CAmLjE"}
|