@opendaw/studio-core 0.0.59 → 0.0.61
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AudioOfflineRenderer.d.ts +2 -2
- package/dist/AudioOfflineRenderer.d.ts.map +1 -1
- package/dist/AudioOfflineRenderer.js +9 -9
- package/dist/AudioUtils.d.ts +4 -0
- package/dist/AudioUtils.d.ts.map +1 -0
- package/dist/AudioUtils.js +20 -0
- package/dist/EffectBox.d.ts +2 -2
- package/dist/EffectBox.d.ts.map +1 -1
- package/dist/EffectFactories.d.ts +3 -0
- package/dist/EffectFactories.d.ts.map +1 -1
- package/dist/EffectFactories.js +17 -3
- package/dist/Engine.d.ts +1 -1
- package/dist/Engine.d.ts.map +1 -1
- package/dist/EngineFacade.d.ts +1 -1
- package/dist/EngineFacade.d.ts.map +1 -1
- package/dist/EngineFacade.js +1 -1
- package/dist/EngineWorklet.d.ts.map +1 -1
- package/dist/EngineWorklet.js +7 -8
- package/dist/FilePickerAcceptTypes.d.ts.map +1 -1
- package/dist/Preferences.d.ts +4 -0
- package/dist/Preferences.d.ts.map +1 -1
- package/dist/Preferences.js +2 -0
- package/dist/RecordingWorklet.d.ts +2 -1
- package/dist/RecordingWorklet.d.ts.map +1 -1
- package/dist/WavFile.d.ts +4 -7
- package/dist/WavFile.d.ts.map +1 -1
- package/dist/WavFile.js +22 -21
- package/dist/Workers.d.ts +2 -0
- package/dist/Workers.d.ts.map +1 -1
- package/dist/Workers.js +11 -0
- package/dist/capture/CaptureAudio.d.ts.map +1 -1
- package/dist/capture/CaptureAudio.js +0 -2
- package/dist/capture/RecordAudio.d.ts.map +1 -1
- package/dist/capture/RecordAudio.js +3 -1
- package/dist/cloud/CloudBackupProjects.js +4 -4
- package/dist/cloud/CloudBackupSamples.d.ts.map +1 -1
- package/dist/cloud/CloudBackupSamples.js +3 -9
- package/dist/cloud/CloudBackupSoundfonts.js +1 -1
- package/dist/dawproject/DawProjectExporter.d.ts.map +1 -1
- package/dist/dawproject/DawProjectExporter.js +2 -12
- package/dist/dawproject/DawProjectImporter.d.ts.map +1 -1
- package/dist/dawproject/DawProjectImporter.js +5 -3
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/midi/MIDIReceiver.d.ts +12 -0
- package/dist/midi/MIDIReceiver.d.ts.map +1 -0
- package/dist/midi/MIDIReceiver.js +65 -0
- package/dist/midi/MidiDevices.d.ts +4 -1
- package/dist/midi/MidiDevices.d.ts.map +1 -1
- package/dist/midi/MidiDevices.js +40 -1
- package/dist/processors.js +17 -19
- package/dist/processors.js.map +4 -4
- package/dist/project/Project.d.ts.map +1 -1
- package/dist/project/Project.js +14 -2
- package/dist/project/ProjectApi.d.ts +13 -4
- package/dist/project/ProjectApi.d.ts.map +1 -1
- package/dist/project/ProjectApi.js +71 -29
- package/dist/project/ProjectBundle.d.ts +2 -2
- package/dist/project/ProjectBundle.d.ts.map +1 -1
- package/dist/project/ProjectBundle.js +3 -3
- package/dist/project/ProjectMeta.d.ts +2 -0
- package/dist/project/ProjectMeta.d.ts.map +1 -1
- package/dist/project/ProjectMeta.js +1 -0
- package/dist/project/ProjectMigration.d.ts.map +1 -1
- package/dist/project/ProjectMigration.js +47 -5
- package/dist/project/ProjectProfile.d.ts +1 -0
- package/dist/project/ProjectProfile.d.ts.map +1 -1
- package/dist/project/ProjectProfile.js +5 -0
- package/dist/project/audio/AudioContentFactory.d.ts +34 -0
- package/dist/project/audio/AudioContentFactory.d.ts.map +1 -0
- package/dist/project/audio/AudioContentFactory.js +107 -0
- package/dist/project/audio/AudioContentHelpers.d.ts +7 -0
- package/dist/project/audio/AudioContentHelpers.d.ts.map +1 -0
- package/dist/project/audio/AudioContentHelpers.js +17 -0
- package/dist/project/audio/AudioContentModifier.d.ts +10 -0
- package/dist/project/audio/AudioContentModifier.d.ts.map +1 -0
- package/dist/project/audio/AudioContentModifier.js +127 -0
- package/dist/project/audio/AudioFileBoxFactory.d.ts +8 -0
- package/dist/project/audio/AudioFileBoxFactory.d.ts.map +1 -0
- package/dist/project/audio/AudioFileBoxFactory.js +36 -0
- package/dist/project/audio/index.d.ts +4 -0
- package/dist/project/audio/index.d.ts.map +1 -0
- package/dist/project/audio/index.js +3 -0
- package/dist/project/index.d.ts +1 -0
- package/dist/project/index.d.ts.map +1 -1
- package/dist/project/index.js +1 -0
- package/dist/samples/DefaultSampleLoader.d.ts +2 -1
- package/dist/samples/DefaultSampleLoader.d.ts.map +1 -1
- package/dist/samples/DefaultSampleLoader.js +1 -1
- package/dist/samples/DefaultSampleLoaderManager.d.ts +3 -1
- package/dist/samples/DefaultSampleLoaderManager.d.ts.map +1 -1
- package/dist/samples/DefaultSampleLoaderManager.js +13 -0
- package/dist/samples/OpenSampleAPI.d.ts +2 -1
- package/dist/samples/OpenSampleAPI.d.ts.map +1 -1
- package/dist/samples/OpenSampleAPI.js +2 -2
- package/dist/samples/SampleAPI.d.ts +2 -1
- package/dist/samples/SampleAPI.d.ts.map +1 -1
- package/dist/samples/SampleProvider.d.ts +2 -1
- package/dist/samples/SampleProvider.d.ts.map +1 -1
- package/dist/samples/SampleService.d.ts.map +1 -1
- package/dist/samples/SampleStorage.d.ts +2 -1
- package/dist/samples/SampleStorage.d.ts.map +1 -1
- package/dist/samples/SampleStorage.js +6 -5
- package/dist/soundfont/OpenSoundfontAPI.d.ts.map +1 -1
- package/dist/soundfont/OpenSoundfontAPI.js +3 -3
- package/dist/workers-main.js +1 -5
- package/dist/workers-main.js.map +4 -4
- package/package.json +15 -15
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { int, Option } from "@opendaw/lib-std";
|
|
1
|
+
import { int, Option, Progress } from "@opendaw/lib-std";
|
|
2
2
|
import { ExportStemsConfiguration } from "@opendaw/studio-adapters";
|
|
3
3
|
import { Project } from "./project";
|
|
4
4
|
export declare namespace AudioOfflineRenderer {
|
|
5
|
-
const start: (source: Project, optExportConfiguration: Option<ExportStemsConfiguration>, sampleRate?: int) => Promise<AudioBuffer>;
|
|
5
|
+
const start: (source: Project, optExportConfiguration: Option<ExportStemsConfiguration>, progress: Progress.Handler, abortSignal?: AbortSignal, sampleRate?: int) => Promise<AudioBuffer>;
|
|
6
6
|
}
|
|
7
7
|
//# sourceMappingURL=AudioOfflineRenderer.d.ts.map
|
|
@@ -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,EAAS,GAAG,EAAa,MAAM,EAAS,QAAQ,EAAuB,MAAM,kBAAkB,CAAA;AAGtG,OAAO,EAAC,wBAAwB,EAAC,MAAM,0BAA0B,CAAA;AACjE,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AAGjC,yBAAiB,oBAAoB,CAAC;IAC3B,MAAM,KAAK,GAAU,QAAQ,OAAO,EACf,wBAAwB,MAAM,CAAC,wBAAwB,CAAC,EACxD,UAAU,QAAQ,CAAC,OAAO,EAC1B,cAAc,WAAW,EACzB,aAAY,GAAY,KAAG,OAAO,CAAC,WAAW,CA+CzE,CAAA;CACJ"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Errors, isDefined, panic, Terminator, TimeSpan } from "@opendaw/lib-std";
|
|
2
2
|
import { AnimationFrame } from "@opendaw/lib-dom";
|
|
3
3
|
import { Wait } from "@opendaw/lib-runtime";
|
|
4
4
|
import { ExportStemsConfiguration } from "@opendaw/studio-adapters";
|
|
5
5
|
import { AudioWorklets } from "./AudioWorklets";
|
|
6
6
|
export var AudioOfflineRenderer;
|
|
7
7
|
(function (AudioOfflineRenderer) {
|
|
8
|
-
AudioOfflineRenderer.start = async (source, optExportConfiguration, sampleRate = 48_000) => {
|
|
8
|
+
AudioOfflineRenderer.start = async (source, optExportConfiguration, progress, abortSignal, sampleRate = 48_000) => {
|
|
9
9
|
const numStems = ExportStemsConfiguration.countStems(optExportConfiguration);
|
|
10
10
|
if (numStems === 0) {
|
|
11
11
|
return panic("Nothing to export");
|
|
@@ -13,7 +13,6 @@ export var AudioOfflineRenderer;
|
|
|
13
13
|
const { promise, reject, resolve } = Promise.withResolvers();
|
|
14
14
|
const projectCopy = source.copy();
|
|
15
15
|
const terminator = new Terminator();
|
|
16
|
-
const progress = terminator.own(new DefaultObservableValue(0.0));
|
|
17
16
|
projectCopy.boxGraph.beginTransaction();
|
|
18
17
|
projectCopy.timelineBox.loopArea.enabled.setValue(false);
|
|
19
18
|
projectCopy.boxGraph.endTransaction();
|
|
@@ -32,17 +31,18 @@ export var AudioOfflineRenderer;
|
|
|
32
31
|
while (!await engineWorklet.queryLoadingComplete()) {
|
|
33
32
|
await Wait.timeSpan(TimeSpan.seconds(1));
|
|
34
33
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
terminator.ownAll(projectCopy, RuntimeNotifier.progress({
|
|
38
|
-
headline: "Rendering...", progress, cancel: () => {
|
|
34
|
+
if (isDefined(abortSignal)) {
|
|
35
|
+
abortSignal.onabort = () => {
|
|
39
36
|
engineWorklet.stop(true);
|
|
40
37
|
engineWorklet.sleep();
|
|
41
38
|
terminator.terminate();
|
|
42
39
|
cancelled = true;
|
|
43
40
|
reject(Errors.AbortError);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
// Start rendering...
|
|
44
|
+
let cancelled = false;
|
|
45
|
+
terminator.ownAll(projectCopy, AnimationFrame.add(() => progress(context.currentTime / durationInSeconds)));
|
|
46
46
|
context.startRendering().then(buffer => {
|
|
47
47
|
console.debug(`rendering complete. cancelled: ${cancelled}`);
|
|
48
48
|
if (!cancelled) {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AudioUtils.d.ts","sourceRoot":"","sources":["../src/AudioUtils.ts"],"names":[],"mappings":"AAEA,yBAAiB,UAAU,CAAC;IACjB,MAAM,uBAAuB,GAAI,QAAQ,WAAW,EAAE,cAAa,MAAc,KAAG,MAe1F,CAAA;CACJ"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { dbToGain } from "@opendaw/lib-dsp";
|
|
2
|
+
export var AudioUtils;
|
|
3
|
+
(function (AudioUtils) {
|
|
4
|
+
AudioUtils.findLastNonSilentSample = (buffer, thresholdDb = -72.0) => {
|
|
5
|
+
const threshold = dbToGain(thresholdDb);
|
|
6
|
+
const numChannels = buffer.numberOfChannels;
|
|
7
|
+
const length = buffer.length;
|
|
8
|
+
let lastNonSilentSample = 0;
|
|
9
|
+
for (let channel = 0; channel < numChannels; channel++) {
|
|
10
|
+
const channelData = buffer.getChannelData(channel);
|
|
11
|
+
for (let i = length - 1; i >= 0; i--) {
|
|
12
|
+
if (Math.abs(channelData[i]) > threshold) {
|
|
13
|
+
lastNonSilentSample = Math.max(lastNonSilentSample, i);
|
|
14
|
+
break;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
return lastNonSilentSample + 1;
|
|
19
|
+
};
|
|
20
|
+
})(AudioUtils || (AudioUtils = {}));
|
package/dist/EffectBox.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { ArpeggioDeviceBox, CompressorDeviceBox, CrusherDeviceBox,
|
|
2
|
-
export type EffectBox = ArpeggioDeviceBox | PitchDeviceBox | VelocityDeviceBox | ZeitgeistDeviceBox | UnknownMidiEffectDeviceBox | DelayDeviceBox | ReverbDeviceBox | RevampDeviceBox | StereoToolDeviceBox | TidalDeviceBox | ModularDeviceBox | UnknownAudioEffectDeviceBox | CompressorDeviceBox | CrusherDeviceBox | FoldDeviceBox;
|
|
1
|
+
import { ArpeggioDeviceBox, CompressorDeviceBox, CrusherDeviceBox, DattorroReverbDeviceBox, DelayDeviceBox, FoldDeviceBox, ModularDeviceBox, PitchDeviceBox, RevampDeviceBox, ReverbDeviceBox, StereoToolDeviceBox, TidalDeviceBox, UnknownAudioEffectDeviceBox, UnknownMidiEffectDeviceBox, VelocityDeviceBox, ZeitgeistDeviceBox } from "@opendaw/studio-boxes";
|
|
2
|
+
export type EffectBox = ArpeggioDeviceBox | PitchDeviceBox | VelocityDeviceBox | ZeitgeistDeviceBox | UnknownMidiEffectDeviceBox | DelayDeviceBox | ReverbDeviceBox | RevampDeviceBox | StereoToolDeviceBox | TidalDeviceBox | ModularDeviceBox | UnknownAudioEffectDeviceBox | CompressorDeviceBox | CrusherDeviceBox | FoldDeviceBox | DattorroReverbDeviceBox;
|
|
3
3
|
//# sourceMappingURL=EffectBox.d.ts.map
|
package/dist/EffectBox.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EffectBox.d.ts","sourceRoot":"","sources":["../src/EffectBox.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,
|
|
1
|
+
{"version":3,"file":"EffectBox.d.ts","sourceRoot":"","sources":["../src/EffectBox.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,uBAAuB,EACvB,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,2BAA2B,EAC3B,0BAA0B,EAC1B,iBAAiB,EACjB,kBAAkB,EACrB,MAAM,uBAAuB,CAAA;AAE9B,MAAM,MAAM,SAAS,GACf,iBAAiB,GAAG,cAAc,GAAG,iBAAiB,GAAG,kBAAkB,GAAG,0BAA0B,GACxG,cAAc,GAAG,eAAe,GAAG,eAAe,GAAG,mBAAmB,GAAG,cAAc,GACzF,gBAAgB,GAAG,2BAA2B,GAAG,mBAAmB,GAAG,gBAAgB,GAAG,aAAa,GACvG,uBAAuB,CAAA"}
|
|
@@ -6,6 +6,7 @@ export declare namespace EffectFactories {
|
|
|
6
6
|
const Zeitgeist: EffectFactory;
|
|
7
7
|
const StereoTool: EffectFactory;
|
|
8
8
|
const Delay: EffectFactory;
|
|
9
|
+
const DattorroReverb: EffectFactory;
|
|
9
10
|
const Compressor: EffectFactory;
|
|
10
11
|
const Reverb: EffectFactory;
|
|
11
12
|
const Crusher: EffectFactory;
|
|
@@ -24,6 +25,7 @@ export declare namespace EffectFactories {
|
|
|
24
25
|
Compressor: EffectFactory;
|
|
25
26
|
Delay: EffectFactory;
|
|
26
27
|
Reverb: EffectFactory;
|
|
28
|
+
DattorroReverb: EffectFactory;
|
|
27
29
|
Revamp: EffectFactory;
|
|
28
30
|
Crusher: EffectFactory;
|
|
29
31
|
Fold: EffectFactory;
|
|
@@ -37,6 +39,7 @@ export declare namespace EffectFactories {
|
|
|
37
39
|
Compressor: EffectFactory;
|
|
38
40
|
Delay: EffectFactory;
|
|
39
41
|
Reverb: EffectFactory;
|
|
42
|
+
DattorroReverb: EffectFactory;
|
|
40
43
|
Revamp: EffectFactory;
|
|
41
44
|
Crusher: EffectFactory;
|
|
42
45
|
Fold: EffectFactory;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EffectFactories.d.ts","sourceRoot":"","sources":["../src/EffectFactories.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"EffectFactories.d.ts","sourceRoot":"","sources":["../src/EffectFactories.ts"],"names":[],"mappings":"AAuBA,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAA;AAG7C,yBAAiB,eAAe,CAAC;IACtB,MAAM,QAAQ,EAAE,aAWtB,CAAA;IAEM,MAAM,KAAK,EAAE,aAWnB,CAAA;IAEM,MAAM,QAAQ,EAAE,aAYtB,CAAA;IAEM,MAAM,SAAS,EAAE,aAqBvB,CAAA;IAEM,MAAM,UAAU,EAAE,aAYxB,CAAA;IAEM,MAAM,KAAK,EAAE,aAYnB,CAAA;IAEM,MAAM,cAAc,EAAE,aAY5B,CAAA;IAEM,MAAM,UAAU,EAAE,aAYxB,CAAA;IAEM,MAAM,MAAM,EAAE,aAapB,CAAA;IAEM,MAAM,OAAO,EAAE,aAYrB,CAAA;IAEM,MAAM,IAAI,EAAE,aAYlB,CAAA;IAEM,MAAM,KAAK,EAAE,aAanB,CAAA;IAEM,MAAM,MAAM,EAAE,aAYpB,CAAA;IAEM,MAAM,OAAO,EAAE,aAoCrB,CAAA;IAEM,MAAM,SAAS;;;;;KAAyC,CAAA;IACxD,MAAM,UAAU;;;;;;;;;;;KAEtB,CAAA;IACM,MAAM,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,CAA4B,CAAA;IACjF,MAAM,SAAS,EAAE,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,CAA6B,CAAA;IACnF,MAAM,WAAW;;;;;;;;;;;;;;;KAAgC,CAAA;IACxD,KAAY,cAAc,GAAG,MAAM,OAAO,SAAS,CAAA;IACnD,KAAY,eAAe,GAAG,MAAM,OAAO,UAAU,CAAA;CACxD"}
|
package/dist/EffectFactories.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { UUID } from "@opendaw/lib-std";
|
|
2
|
-
import { ArpeggioDeviceBox, CompressorDeviceBox, CrusherDeviceBox, DelayDeviceBox, FoldDeviceBox, GrooveShuffleBox, ModularAudioInputBox, ModularAudioOutputBox, ModularBox, ModularDeviceBox, ModuleConnectionBox, PitchDeviceBox, RevampDeviceBox, ReverbDeviceBox, StereoToolDeviceBox, TidalDeviceBox, VelocityDeviceBox, ZeitgeistDeviceBox } from "@opendaw/studio-boxes";
|
|
2
|
+
import { ArpeggioDeviceBox, CompressorDeviceBox, CrusherDeviceBox, DattorroReverbDeviceBox, DelayDeviceBox, FoldDeviceBox, GrooveShuffleBox, ModularAudioInputBox, ModularAudioOutputBox, ModularBox, ModularDeviceBox, ModuleConnectionBox, PitchDeviceBox, RevampDeviceBox, ReverbDeviceBox, StereoToolDeviceBox, TidalDeviceBox, VelocityDeviceBox, ZeitgeistDeviceBox } from "@opendaw/studio-boxes";
|
|
3
3
|
import { IconSymbol } from "@opendaw/studio-enums";
|
|
4
4
|
import { EffectParameterDefaults } from "./EffectParameterDefaults";
|
|
5
5
|
export var EffectFactories;
|
|
@@ -87,6 +87,18 @@ export var EffectFactories;
|
|
|
87
87
|
box.host.refer(hostField);
|
|
88
88
|
})
|
|
89
89
|
};
|
|
90
|
+
EffectFactories.DattorroReverb = {
|
|
91
|
+
defaultName: "Dattorro Reverb",
|
|
92
|
+
defaultIcon: IconSymbol.Dattorro,
|
|
93
|
+
description: "Dense algorithmic reverb based on Dattorro's design, capable of infinite decay",
|
|
94
|
+
separatorBefore: false,
|
|
95
|
+
type: "audio",
|
|
96
|
+
create: ({ boxGraph }, hostField, index) => DattorroReverbDeviceBox.create(boxGraph, UUID.generate(), box => {
|
|
97
|
+
box.label.setValue("Dattorro Reverb");
|
|
98
|
+
box.index.setValue(index);
|
|
99
|
+
box.host.refer(hostField);
|
|
100
|
+
})
|
|
101
|
+
};
|
|
90
102
|
EffectFactories.Compressor = {
|
|
91
103
|
defaultName: "Compressor",
|
|
92
104
|
defaultIcon: IconSymbol.Compressor,
|
|
@@ -100,7 +112,7 @@ export var EffectFactories;
|
|
|
100
112
|
})
|
|
101
113
|
};
|
|
102
114
|
EffectFactories.Reverb = {
|
|
103
|
-
defaultName: "Reverb",
|
|
115
|
+
defaultName: "Cheap Reverb",
|
|
104
116
|
defaultIcon: IconSymbol.Cube,
|
|
105
117
|
description: "Simulates space and depth with reflections",
|
|
106
118
|
separatorBefore: false,
|
|
@@ -199,7 +211,9 @@ export var EffectFactories;
|
|
|
199
211
|
}
|
|
200
212
|
};
|
|
201
213
|
EffectFactories.MidiNamed = { Arpeggio: EffectFactories.Arpeggio, Pitch: EffectFactories.Pitch, Velocity: EffectFactories.Velocity, Zeitgeist: EffectFactories.Zeitgeist };
|
|
202
|
-
EffectFactories.AudioNamed = {
|
|
214
|
+
EffectFactories.AudioNamed = {
|
|
215
|
+
StereoTool: EffectFactories.StereoTool, Compressor: EffectFactories.Compressor, Delay: EffectFactories.Delay, Reverb: EffectFactories.Reverb, DattorroReverb: EffectFactories.DattorroReverb, Revamp: EffectFactories.Revamp, Crusher: EffectFactories.Crusher, Fold: EffectFactories.Fold, Tidal: EffectFactories.Tidal, Modular: EffectFactories.Modular
|
|
216
|
+
};
|
|
203
217
|
EffectFactories.MidiList = Object.values(EffectFactories.MidiNamed);
|
|
204
218
|
EffectFactories.AudioList = Object.values(EffectFactories.AudioNamed);
|
|
205
219
|
EffectFactories.MergedNamed = { ...EffectFactories.MidiNamed, ...EffectFactories.AudioNamed };
|
package/dist/Engine.d.ts
CHANGED
|
@@ -24,7 +24,7 @@ export interface Engine extends Terminable {
|
|
|
24
24
|
get isPlaying(): ObservableValue<boolean>;
|
|
25
25
|
get isRecording(): ObservableValue<boolean>;
|
|
26
26
|
get isCountingIn(): ObservableValue<boolean>;
|
|
27
|
-
get metronomeEnabled():
|
|
27
|
+
get metronomeEnabled(): MutableObservableValue<boolean>;
|
|
28
28
|
get playbackTimestamp(): ObservableValue<ppqn>;
|
|
29
29
|
get playbackTimestampEnabled(): MutableObservableValue<boolean>;
|
|
30
30
|
get countInBarsTotal(): ObservableValue<int>;
|
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,EACH,GAAG,EACH,sBAAsB,EACtB,QAAQ,EACR,eAAe,EACf,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,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,OAAO,EAAC,MAAM,WAAW,CAAA;AAEjC,MAAM,WAAW,MAAO,SAAQ,UAAU;IACtC,IAAI,IAAI,IAAI,CAAA;IACZ,IAAI,IAAI,IAAI,CAAA;IACZ,WAAW,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAA;IACjC,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;IAC7C,aAAa,IAAI,IAAI,CAAA;IACrB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACxB,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC,CAAA;IACxC,IAAI,IAAI,IAAI,CAAA;IACZ,KAAK,IAAI,IAAI,CAAA;IACb,KAAK,IAAI,IAAI,CAAA;IACb,IAAI,IAAI,IAAI,CAAA;IACZ,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,
|
|
1
|
+
{"version":3,"file":"Engine.d.ts","sourceRoot":"","sources":["../src/Engine.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,GAAG,EACH,sBAAsB,EACtB,QAAQ,EACR,eAAe,EACf,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,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,OAAO,EAAC,MAAM,WAAW,CAAA;AAEjC,MAAM,WAAW,MAAO,SAAQ,UAAU;IACtC,IAAI,IAAI,IAAI,CAAA;IACZ,IAAI,IAAI,IAAI,CAAA;IACZ,WAAW,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAA;IACjC,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;IAC7C,aAAa,IAAI,IAAI,CAAA;IACrB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACxB,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC,CAAA;IACxC,IAAI,IAAI,IAAI,CAAA;IACZ,KAAK,IAAI,IAAI,CAAA;IACb,KAAK,IAAI,IAAI,CAAA;IACb,IAAI,IAAI,IAAI,CAAA;IACZ,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,sBAAsB,CAAC,OAAO,CAAC,CAAA;IACvD,IAAI,iBAAiB,IAAI,eAAe,CAAC,IAAI,CAAC,CAAA;IAC9C,IAAI,wBAAwB,IAAI,sBAAsB,CAAC,OAAO,CAAC,CAAA;IAC/D,IAAI,gBAAgB,IAAI,eAAe,CAAC,GAAG,CAAC,CAAA;IAC5C,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
|
@@ -26,12 +26,12 @@ export declare class EngineFacade implements Engine {
|
|
|
26
26
|
get countInBeatsRemaining(): ObservableValue<int>;
|
|
27
27
|
get markerState(): DefaultObservableValue<Nullable<[UUID.Bytes, int]>>;
|
|
28
28
|
get project(): Project;
|
|
29
|
+
get sampleRate(): number;
|
|
29
30
|
isReady(): Promise<void>;
|
|
30
31
|
queryLoadingComplete(): Promise<boolean>;
|
|
31
32
|
panic(): void;
|
|
32
33
|
sleep(): void;
|
|
33
34
|
wake(): void;
|
|
34
|
-
sampleRate(): number;
|
|
35
35
|
subscribeClipNotification(observer: Observer<ClipNotification>): Subscription;
|
|
36
36
|
subscribeNotes(observer: Observer<NoteSignal>): Subscription;
|
|
37
37
|
ignoreNoteRegion(uuid: UUID.Bytes): void;
|
|
@@ -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,WAAW,CAAA;AAEjC,qBAAa,YAAa,YAAW,MAAM;;;IAmBvC,UAAU,CAAC,OAAO,EAAE,aAAa;IAoBjC,aAAa,IAAI,IAAI;IAErB,cAAc,IAAI,IAAI;IAMtB,IAAI,IAAI,IAAI;IACZ,IAAI,CAAC,KAAK,GAAE,OAAe,GAAG,IAAI;IAClC,WAAW,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI;IACjC,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAC7C,aAAa,IAAI,IAAI;IAErB,IAAI,QAAQ,IAAI,eAAe,CAAC,IAAI,CAAC,CAAwB;IAC7D,IAAI,SAAS,IAAI,eAAe,CAAC,OAAO,CAAC,CAAyB;IAClE,IAAI,WAAW,IAAI,eAAe,CAAC,OAAO,CAAC,CAA2B;IACtE,IAAI,YAAY,IAAI,eAAe,CAAC,OAAO,CAAC,CAA4B;IACxE,IAAI,gBAAgB,IAAI,sBAAsB,CAAC,OAAO,CAAC,CAAgC;IACvF,IAAI,iBAAiB,IAAI,eAAe,CAAC,IAAI,CAAC,CAAiC;IAC/E,IAAI,wBAAwB,IAAI,sBAAsB,CAAC,OAAO,CAAC,CAAwC;IACvG,IAAI,gBAAgB,IAAI,sBAAsB,CAAC,GAAG,CAAC,CAAgC;IACnF,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;
|
|
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,WAAW,CAAA;AAEjC,qBAAa,YAAa,YAAW,MAAM;;;IAmBvC,UAAU,CAAC,OAAO,EAAE,aAAa;IAoBjC,aAAa,IAAI,IAAI;IAErB,cAAc,IAAI,IAAI;IAMtB,IAAI,IAAI,IAAI;IACZ,IAAI,CAAC,KAAK,GAAE,OAAe,GAAG,IAAI;IAClC,WAAW,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI;IACjC,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAC7C,aAAa,IAAI,IAAI;IAErB,IAAI,QAAQ,IAAI,eAAe,CAAC,IAAI,CAAC,CAAwB;IAC7D,IAAI,SAAS,IAAI,eAAe,CAAC,OAAO,CAAC,CAAyB;IAClE,IAAI,WAAW,IAAI,eAAe,CAAC,OAAO,CAAC,CAA2B;IACtE,IAAI,YAAY,IAAI,eAAe,CAAC,OAAO,CAAC,CAA4B;IACxE,IAAI,gBAAgB,IAAI,sBAAsB,CAAC,OAAO,CAAC,CAAgC;IACvF,IAAI,iBAAiB,IAAI,eAAe,CAAC,IAAI,CAAC,CAAiC;IAC/E,IAAI,wBAAwB,IAAI,sBAAsB,CAAC,OAAO,CAAC,CAAwC;IACvG,IAAI,gBAAgB,IAAI,sBAAsB,CAAC,GAAG,CAAC,CAAgC;IACnF,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;IACzF,IAAI,UAAU,IAAI,MAAM,CAAsF;IAE9G,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IACxB,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC;IAGxC,KAAK,IAAI,IAAI;IACb,KAAK,IAAI,IAAI;IACb,IAAI,IAAI,IAAI;IACZ,yBAAyB,CAAC,QAAQ,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GAAG,YAAY;IAG7E,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,YAAY;IAG5D,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI;IAGxC,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAGpC,gBAAgB,CAAC,OAAO,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI;IAG1D,gBAAgB,CAAC,QAAQ,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI;IAI3D,SAAS,IAAI,IAAI;CAIpB"}
|
package/dist/EngineFacade.js
CHANGED
|
@@ -41,6 +41,7 @@ export class EngineFacade {
|
|
|
41
41
|
get countInBeatsRemaining() { return this.#countInBeatsRemaining; }
|
|
42
42
|
get markerState() { return this.#markerState; }
|
|
43
43
|
get project() { return this.#worklet.unwrap("No worklet to get project").project; }
|
|
44
|
+
get sampleRate() { return this.#worklet.isEmpty() ? 44_100 : this.#worklet.unwrap().context.sampleRate; }
|
|
44
45
|
isReady() { return this.#worklet.mapOr(worklet => worklet.isReady(), Promise.resolve()); }
|
|
45
46
|
queryLoadingComplete() {
|
|
46
47
|
return this.#worklet.mapOr(worklet => worklet.queryLoadingComplete(), Promise.resolve(false));
|
|
@@ -48,7 +49,6 @@ export class EngineFacade {
|
|
|
48
49
|
panic() { this.#worklet.ifSome(worklet => worklet.panic()); }
|
|
49
50
|
sleep() { this.#worklet.ifSome(worklet => worklet.sleep()); }
|
|
50
51
|
wake() { this.#worklet.ifSome(worklet => worklet.wake()); }
|
|
51
|
-
sampleRate() { return this.#worklet.isEmpty() ? 44_100 : this.#worklet.unwrap().context.sampleRate; }
|
|
52
52
|
subscribeClipNotification(observer) {
|
|
53
53
|
return this.#worklet.unwrap("No worklet to subscribeClipNotification").subscribeClipNotification(observer);
|
|
54
54
|
}
|
|
@@ -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,
|
|
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,EAAY,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAIhD,OAAO,EACH,gBAAgB,EAOhB,wBAAwB,EACxB,UAAU,EACV,gBAAgB,EACnB,MAAM,0BAA0B,CAAA;AAEjC,OAAO,EAAC,MAAM,EAAC,MAAM,UAAU,CAAA;AAC/B,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AAIjC,qBAAa,aAAc,SAAQ,gBAAiB,YAAW,MAAM;;IACjE,MAAM,CAAC,EAAE,EAAE,GAAG,CAAQ;IAEtB,QAAQ,CAAC,EAAE,SAAqB;gBAuBpB,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,OAAO,EAChB,mBAAmB,CAAC,EAAE,wBAAwB,EAC9C,OAAO,CAAC,EAAE,gBAAgB;IA2ItC,IAAI,IAAI,IAAI;IACZ,IAAI,CAAC,KAAK,GAAE,OAAe,GAAG,IAAI;IAClC,WAAW,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI;IACjC,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAC7C,aAAa,IAAI,IAAI;IACrB,KAAK,IAAI,IAAI;IACb,KAAK,IAAI,IAAI;IAIb,IAAI,IAAI,IAAI;IAEZ,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,GAAG,CAAC,CAAgC;IACnF,IAAI,qBAAqB,IAAI,eAAe,CAAC,MAAM,CAAC,CAAqC;IACzF,IAAI,QAAQ,IAAI,eAAe,CAAC,IAAI,CAAC,CAAwB;IAC7D,IAAI,iBAAiB,IAAI,sBAAsB,CAAC,MAAM,CAAC,CAAiC;IACxF,IAAI,wBAAwB,IAAI,sBAAsB,CAAC,OAAO,CAAC,CAAwC;IACvG,IAAI,gBAAgB,IAAI,sBAAsB,CAAC,OAAO,CAAC,CAAgC;IACvF,IAAI,WAAW,IAAI,eAAe,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAA2B;IAC1F,IAAI,OAAO,IAAI,OAAO,CAAuB;IAE7C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IACxB,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC;IACxC,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IACpC,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,YAAY;IAC5D,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI;IACxC,gBAAgB,CAAC,OAAO,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI;IAI1D,gBAAgB,CAAC,QAAQ,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI;IAG3D,yBAAyB,CAAC,QAAQ,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GAAG,YAAY;IAQ7E,SAAS,IAAI,IAAI;CAKpB"}
|
package/dist/EngineWorklet.js
CHANGED
|
@@ -3,6 +3,7 @@ import { SyncSource } from "@opendaw/lib-box";
|
|
|
3
3
|
import { AnimationFrame } from "@opendaw/lib-dom";
|
|
4
4
|
import { Communicator, Messenger } from "@opendaw/lib-runtime";
|
|
5
5
|
import { EngineStateSchema, ExportStemsConfiguration } from "@opendaw/studio-adapters";
|
|
6
|
+
import { MIDIReceiver } from "./midi/MIDIReceiver";
|
|
6
7
|
export class EngineWorklet extends AudioWorkletNode {
|
|
7
8
|
static ID = 0 | 0;
|
|
8
9
|
id = EngineWorklet.ID++;
|
|
@@ -88,8 +89,13 @@ export class EngineWorklet extends AudioWorkletNode {
|
|
|
88
89
|
scheduleClipStop(trackIds) {
|
|
89
90
|
dispatcher.dispatchAndForget(this.scheduleClipStop, trackIds);
|
|
90
91
|
}
|
|
92
|
+
setupMIDI(port, buffer) {
|
|
93
|
+
dispatcher.dispatchAndForget(this.setupMIDI, port, buffer);
|
|
94
|
+
}
|
|
91
95
|
terminate() { dispatcher.dispatchAndForget(this.terminate); }
|
|
92
96
|
}));
|
|
97
|
+
const { port, sab } = this.#terminator.own(MIDIReceiver.create(context, (deviceId, data, relativeTimeInMs) => this.#project.receivedMIDIFromEngine(deviceId, data, relativeTimeInMs)));
|
|
98
|
+
this.#commands.setupMIDI(port, sab);
|
|
93
99
|
Communicator.executor(messenger.channel("engine-to-client"), {
|
|
94
100
|
log: (message) => console.log("WORKLET", message),
|
|
95
101
|
error: (reason) => this.dispatchEvent(new ErrorEvent("error", { error: reason })),
|
|
@@ -136,14 +142,7 @@ export class EngineWorklet extends AudioWorkletNode {
|
|
|
136
142
|
changes.started.forEach(uuid => this.#playingClips.push(uuid));
|
|
137
143
|
this.#notifyClipNotification.notify({ type: "sequencing", changes });
|
|
138
144
|
},
|
|
139
|
-
switchMarkerState: (state) => this.#markerState.setValue(state)
|
|
140
|
-
sendMIDIData: (midiDeviceId, data, relativeTimeInMs) => {
|
|
141
|
-
let delay = 20.0; // default 20ms
|
|
142
|
-
if (this.context instanceof AudioContext) {
|
|
143
|
-
delay = this.context.outputLatency / 1000.0;
|
|
144
|
-
}
|
|
145
|
-
this.#project.receivedMIDIFromEngine(midiDeviceId, data, relativeTimeInMs + delay);
|
|
146
|
-
}
|
|
145
|
+
switchMarkerState: (state) => this.#markerState.setValue(state)
|
|
147
146
|
});
|
|
148
147
|
this.#terminator.ownAll(AnimationFrame.add(() => reader.tryRead()), project.liveStreamReceiver.connect(messenger.channel("engine-live-data")), new SyncSource(project.boxGraph, messenger.channel("engine-sync"), false), this.#metronomeEnabled.catchupAndSubscribe(owner => this.#commands.setMetronomeEnabled(owner.getValue())), this.#playbackTimestampEnabled.catchupAndSubscribe(owner => this.#commands.setPlaybackTimestampEnabled(owner.getValue())), this.#countInBarsTotal.catchupAndSubscribe(owner => this.#commands.setCountInBarsTotal(owner.getValue())));
|
|
149
148
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilePickerAcceptTypes.d.ts","sourceRoot":"","sources":["../src/FilePickerAcceptTypes.ts"],"names":[],"mappings":"AAAA,yBAAiB,qBAAqB,CAAC;IAC5B,MAAM,QAAQ,EAAE,iBAKtB,CAAA;IACM,MAAM,cAAc,EAAE,iBAK5B,CAAA;IACM,MAAM,cAAc,EAAE,iBAK5B,CAAA;IAEM,MAAM,eAAe,EAAE,oBAG7B,CAAA;IAEM,MAAM,cAAc,EAAE,oBAG5B,CAAA;IAEM,MAAM,qBAAqB,EAAE,oBAGnC,CAAA;IAEM,MAAM,kBAAkB,EAAE,oBAGhC,CAAA;IACM,MAAM,YAAY,EAAE,oBAG1B,CAAA;
|
|
1
|
+
{"version":3,"file":"FilePickerAcceptTypes.d.ts","sourceRoot":"","sources":["../src/FilePickerAcceptTypes.ts"],"names":[],"mappings":"AAAA,yBAAiB,qBAAqB,CAAC;IAC5B,MAAM,QAAQ,EAAE,iBAKtB,CAAA;IACM,MAAM,cAAc,EAAE,iBAK5B,CAAA;IACM,MAAM,cAAc,EAAE,iBAK5B,CAAA;IAEM,MAAM,eAAe,EAAE,oBAG7B,CAAA;IAEM,MAAM,cAAc,EAAE,oBAG5B,CAAA;IAEM,MAAM,qBAAqB,EAAE,oBAGnC,CAAA;IAEM,MAAM,kBAAkB,EAAE,oBAGhC,CAAA;IACM,MAAM,YAAY,EAAE,oBAG1B,CAAA;CACJ"}
|
package/dist/Preferences.d.ts
CHANGED
|
@@ -1,20 +1,24 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { Observer, Subscription } from "@opendaw/lib-std";
|
|
3
3
|
declare const PreferencesSchema: z.ZodObject<{
|
|
4
|
+
"visible-help-hints": z.ZodDefault<z.ZodBoolean>;
|
|
4
5
|
"auto-open-clips": z.ZodDefault<z.ZodBoolean>;
|
|
5
6
|
"auto-create-output-compressor": z.ZodDefault<z.ZodBoolean>;
|
|
6
7
|
"footer-show-fps-meter": z.ZodDefault<z.ZodBoolean>;
|
|
7
8
|
"footer-show-build-infos": z.ZodDefault<z.ZodBoolean>;
|
|
8
9
|
"dragging-use-pointer-lock": z.ZodDefault<z.ZodBoolean>;
|
|
10
|
+
"enable-beta-features": z.ZodDefault<z.ZodBoolean>;
|
|
9
11
|
}, z.core.$strip>;
|
|
10
12
|
export type Preferences = z.infer<typeof PreferencesSchema>;
|
|
11
13
|
export declare const Preferences: {
|
|
12
14
|
values: {
|
|
15
|
+
"visible-help-hints": boolean;
|
|
13
16
|
"auto-open-clips": boolean;
|
|
14
17
|
"auto-create-output-compressor": boolean;
|
|
15
18
|
"footer-show-fps-meter": boolean;
|
|
16
19
|
"footer-show-build-infos": boolean;
|
|
17
20
|
"dragging-use-pointer-lock": boolean;
|
|
21
|
+
"enable-beta-features": boolean;
|
|
18
22
|
};
|
|
19
23
|
catchupAndSubscribe: <KEY extends keyof Preferences>(observer: Observer<Preferences[KEY]>, property: KEY) => Subscription;
|
|
20
24
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Preferences.d.ts","sourceRoot":"","sources":["../src/Preferences.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAA;AACrB,OAAO,EAAsB,QAAQ,EAAE,YAAY,EAAW,MAAM,kBAAkB,CAAA;AAEtF,QAAA,MAAM,iBAAiB
|
|
1
|
+
{"version":3,"file":"Preferences.d.ts","sourceRoot":"","sources":["../src/Preferences.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAA;AACrB,OAAO,EAAsB,QAAQ,EAAE,YAAY,EAAW,MAAM,kBAAkB,CAAA;AAEtF,QAAA,MAAM,iBAAiB;;;;;;;;iBAQrB,CAAA;AAEF,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAE3D,eAAO,MAAM,WAAW;;;;;;;;;;0BAkCM,GAAG,SAAS,MAAM,WAAW,YACrC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,YAAY,GAAG,KAAG,YAAY;CAK1E,CAAA"}
|
package/dist/Preferences.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { isDefined, Notifier, tryCatch } from "@opendaw/lib-std";
|
|
3
3
|
const PreferencesSchema = z.object({
|
|
4
|
+
"visible-help-hints": z.boolean().default(true),
|
|
4
5
|
"auto-open-clips": z.boolean().default(false),
|
|
5
6
|
"auto-create-output-compressor": z.boolean().default(true),
|
|
6
7
|
"footer-show-fps-meter": z.boolean().default(false),
|
|
7
8
|
"footer-show-build-infos": z.boolean().default(false),
|
|
8
9
|
"dragging-use-pointer-lock": z.boolean().default(false),
|
|
10
|
+
"enable-beta-features": z.boolean().default(false),
|
|
9
11
|
});
|
|
10
12
|
export const Preferences = (() => {
|
|
11
13
|
const STORAGE_KEY = "preferences";
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { int, Observer, Option, Subscription, Terminable, UUID } from "@opendaw/lib-std";
|
|
2
|
+
import { AudioData } from "@opendaw/lib-dsp";
|
|
2
3
|
import { Peaks } from "@opendaw/lib-fusion";
|
|
3
|
-
import {
|
|
4
|
+
import { RingBuffer, SampleLoader, SampleLoaderState } from "@opendaw/studio-adapters";
|
|
4
5
|
export declare class RecordingWorklet extends AudioWorkletNode implements Terminable, SampleLoader {
|
|
5
6
|
#private;
|
|
6
7
|
readonly uuid: UUID.Bytes;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RecordingWorklet.d.ts","sourceRoot":"","sources":["../src/RecordingWorklet.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,GAAG,EAEH,QAAQ,EACR,MAAM,EAGN,YAAY,EACZ,UAAU,EAEV,IAAI,EACP,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"RecordingWorklet.d.ts","sourceRoot":"","sources":["../src/RecordingWorklet.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,GAAG,EAEH,QAAQ,EACR,MAAM,EAGN,YAAY,EACZ,UAAU,EAEV,IAAI,EACP,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAC,SAAS,EAAW,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAC,KAAK,EAAc,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAEH,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;CAyCrB"}
|
package/dist/WavFile.d.ts
CHANGED
|
@@ -1,10 +1,7 @@
|
|
|
1
|
+
import { int } from "@opendaw/lib-std";
|
|
2
|
+
import { AudioData } from "@opendaw/lib-dsp";
|
|
1
3
|
export declare namespace WavFile {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
sampleRate: number;
|
|
5
|
-
numFrames: number;
|
|
6
|
-
};
|
|
7
|
-
const decodeFloats: (buffer: ArrayBuffer) => Audio;
|
|
8
|
-
const encodeFloats: (audio: Audio | AudioBuffer) => ArrayBuffer;
|
|
4
|
+
const decodeFloats: (buffer: ArrayBuffer) => AudioData;
|
|
5
|
+
const encodeFloats: (audio: AudioData | AudioBuffer, maxLength?: int) => ArrayBuffer;
|
|
9
6
|
}
|
|
10
7
|
//# sourceMappingURL=WavFile.d.ts.map
|
package/dist/WavFile.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WavFile.d.ts","sourceRoot":"","sources":["../src/WavFile.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"WavFile.d.ts","sourceRoot":"","sources":["../src/WavFile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,GAAG,EAAQ,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAC,SAAS,EAAC,MAAM,kBAAkB,CAAA;AAE1C,yBAAiB,OAAO,CAAC;IAMd,MAAM,YAAY,GAAI,QAAQ,WAAW,KAAG,SA2ClD,CAAA;IAEM,MAAM,YAAY,GAAI,OAAO,SAAS,GAAG,WAAW,EAAE,YAAW,GAA6B,KAAG,WAwCvG,CAAA;CACJ"}
|
package/dist/WavFile.js
CHANGED
|
@@ -30,43 +30,44 @@ export var WavFile;
|
|
|
30
30
|
return panic("Missing fmt or data chunk");
|
|
31
31
|
}
|
|
32
32
|
const audioFormat = view.getUint16(fmtOffset, true); // 3 = IEEE float
|
|
33
|
-
const
|
|
33
|
+
const numberOfChannels = view.getUint16(fmtOffset + 2, true);
|
|
34
34
|
const sampleRate = view.getUint32(fmtOffset + 4, true);
|
|
35
35
|
const blockAlign = view.getUint16(fmtOffset + 12, true);
|
|
36
36
|
const bitsPerSample = view.getUint16(fmtOffset + 14, true);
|
|
37
37
|
if (audioFormat !== 3 || bitsPerSample !== 32) {
|
|
38
38
|
return panic("Expected 32-bit float WAV (format 3)");
|
|
39
39
|
}
|
|
40
|
-
if (blockAlign !==
|
|
40
|
+
if (blockAlign !== numberOfChannels * 4) {
|
|
41
41
|
return panic("Invalid block alignment");
|
|
42
42
|
}
|
|
43
|
-
const
|
|
44
|
-
const interleaved = new Float32Array(buffer, dataOffset,
|
|
45
|
-
const
|
|
46
|
-
for (let i = 0, w = 0; i <
|
|
47
|
-
for (let c = 0; c <
|
|
48
|
-
|
|
43
|
+
const numberOfFrames = Math.floor(dataSize / blockAlign);
|
|
44
|
+
const interleaved = new Float32Array(buffer, dataOffset, numberOfFrames * numberOfChannels);
|
|
45
|
+
const frames = Arrays.create(() => new Float32Array(numberOfFrames), numberOfChannels);
|
|
46
|
+
for (let i = 0, w = 0; i < numberOfFrames; i++) {
|
|
47
|
+
for (let c = 0; c < numberOfChannels; c++) {
|
|
48
|
+
frames[c][i] = interleaved[w++];
|
|
49
49
|
}
|
|
50
50
|
}
|
|
51
|
-
return {
|
|
51
|
+
return { frames, sampleRate, numberOfFrames, numberOfChannels };
|
|
52
52
|
};
|
|
53
|
-
WavFile.encodeFloats = (audio) => {
|
|
53
|
+
WavFile.encodeFloats = (audio, maxLength = Number.MAX_SAFE_INTEGER) => {
|
|
54
54
|
const bytesPerChannel = Float32Array.BYTES_PER_ELEMENT;
|
|
55
55
|
const sampleRate = audio.sampleRate;
|
|
56
|
-
let
|
|
56
|
+
let numberOfFrames;
|
|
57
57
|
let numberOfChannels;
|
|
58
|
-
let
|
|
58
|
+
let frames;
|
|
59
59
|
if (audio instanceof AudioBuffer) {
|
|
60
|
-
|
|
61
|
-
|
|
60
|
+
frames = Arrays.create(index => audio.getChannelData(index), audio.numberOfChannels);
|
|
61
|
+
numberOfFrames = audio.length;
|
|
62
62
|
numberOfChannels = audio.numberOfChannels;
|
|
63
63
|
}
|
|
64
64
|
else {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
numberOfChannels = audio.
|
|
65
|
+
frames = audio.frames;
|
|
66
|
+
numberOfFrames = audio.numberOfFrames;
|
|
67
|
+
numberOfChannels = audio.frames.length;
|
|
68
68
|
}
|
|
69
|
-
|
|
69
|
+
numberOfFrames = Math.min(maxLength, numberOfFrames);
|
|
70
|
+
const size = 44 + numberOfFrames * numberOfChannels * bytesPerChannel;
|
|
70
71
|
const buf = new ArrayBuffer(size);
|
|
71
72
|
const view = new DataView(buf);
|
|
72
73
|
view.setUint32(0, MAGIC_RIFF, true);
|
|
@@ -81,11 +82,11 @@ export var WavFile;
|
|
|
81
82
|
view.setUint16(32, numberOfChannels * bytesPerChannel, true);
|
|
82
83
|
view.setUint16(34, 8 * bytesPerChannel, true);
|
|
83
84
|
view.setUint32(36, MAGIC_DATA, true);
|
|
84
|
-
view.setUint32(40, numberOfChannels *
|
|
85
|
+
view.setUint32(40, numberOfChannels * numberOfFrames * bytesPerChannel, true);
|
|
85
86
|
let w = 44;
|
|
86
|
-
for (let i = 0; i <
|
|
87
|
+
for (let i = 0; i < numberOfFrames; ++i) {
|
|
87
88
|
for (let j = 0; j < numberOfChannels; ++j) {
|
|
88
|
-
view.setFloat32(w,
|
|
89
|
+
view.setFloat32(w, frames[j][i], true);
|
|
89
90
|
w += bytesPerChannel;
|
|
90
91
|
}
|
|
91
92
|
}
|
package/dist/Workers.d.ts
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { Option } from "@opendaw/lib-std";
|
|
2
2
|
import { Messenger } from "@opendaw/lib-runtime";
|
|
3
3
|
import type { OpfsProtocol, SamplePeakProtocol } from "@opendaw/lib-fusion";
|
|
4
|
+
import type { TransientProtocol } from "@opendaw/lib-dsp";
|
|
4
5
|
export declare class Workers {
|
|
5
6
|
static install(url: string): Promise<void>;
|
|
6
7
|
static messenger: Option<Messenger>;
|
|
7
8
|
static get Peak(): SamplePeakProtocol;
|
|
8
9
|
static get Opfs(): OpfsProtocol;
|
|
10
|
+
static get Transients(): TransientProtocol;
|
|
9
11
|
}
|
|
10
12
|
//# sourceMappingURL=Workers.d.ts.map
|
package/dist/Workers.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Workers.d.ts","sourceRoot":"","sources":["../src/Workers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,MAAM,EAAY,MAAM,kBAAkB,CAAA;AACjF,OAAO,EAAe,SAAS,EAAC,MAAM,sBAAsB,CAAA;AAC5D,OAAO,KAAK,EAAC,YAAY,EAAE,kBAAkB,EAAC,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"Workers.d.ts","sourceRoot":"","sources":["../src/Workers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,MAAM,EAAY,MAAM,kBAAkB,CAAA;AACjF,OAAO,EAAe,SAAS,EAAC,MAAM,sBAAsB,CAAA;AAC5D,OAAO,KAAK,EAAC,YAAY,EAAE,kBAAkB,EAAC,MAAM,qBAAqB,CAAA;AACzE,OAAO,KAAK,EAAY,iBAAiB,EAAC,MAAM,kBAAkB,CAAA;AAElE,qBAAa,OAAO;WACH,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBhD,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,CAAc;IAGjD,MAAM,KAAK,IAAI,IAAI,kBAAkB,CAapC;IAGD,MAAM,KAAK,IAAI,IAAI,YAAY,CAS9B;IAGD,MAAM,KAAK,UAAU,IAAI,iBAAiB,CAMzC;CACJ"}
|
package/dist/Workers.js
CHANGED
|
@@ -43,6 +43,12 @@ export class Workers {
|
|
|
43
43
|
list(path) { return router.dispatchAndReturn(this.list, path); }
|
|
44
44
|
});
|
|
45
45
|
}
|
|
46
|
+
static get Transients() {
|
|
47
|
+
return Communicator
|
|
48
|
+
.sender(this.messenger.unwrap("Workers are not installed").channel("transients"), router => new class {
|
|
49
|
+
detect(audioData) { return router.dispatchAndReturn(this.detect, audioData); }
|
|
50
|
+
});
|
|
51
|
+
}
|
|
46
52
|
}
|
|
47
53
|
__decorate([
|
|
48
54
|
Lazy,
|
|
@@ -54,3 +60,8 @@ __decorate([
|
|
|
54
60
|
__metadata("design:type", Object),
|
|
55
61
|
__metadata("design:paramtypes", [])
|
|
56
62
|
], Workers, "Opfs", null);
|
|
63
|
+
__decorate([
|
|
64
|
+
Lazy,
|
|
65
|
+
__metadata("design:type", Object),
|
|
66
|
+
__metadata("design:paramtypes", [])
|
|
67
|
+
], Workers, "Transients", null);
|
|
@@ -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,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;
|
|
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;CA6D/B"}
|
|
@@ -93,8 +93,6 @@ export class CaptureAudio extends Capture {
|
|
|
93
93
|
const channelCount = this.#requestChannels.unwrapOrElse(1);
|
|
94
94
|
return AudioDevices.requestStream({
|
|
95
95
|
deviceId: { exact: deviceId },
|
|
96
|
-
sampleRate: this.manager.project.engine.sampleRate(),
|
|
97
|
-
sampleSize: 32,
|
|
98
96
|
echoCancellation: false,
|
|
99
97
|
noiseSuppression: false,
|
|
100
98
|
autoGainControl: false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RecordAudio.d.ts","sourceRoot":"","sources":["../../src/capture/RecordAudio.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2C,UAAU,EAAmB,MAAM,kBAAkB,CAAA;AAGvG,OAAO,EAAa,mBAAmB,EAAY,MAAM,0BAA0B,CAAA;AACnF,OAAO,EAAC,OAAO,EAAC,MAAM,YAAY,CAAA;AAClC,OAAO,EAAC,gBAAgB,EAAC,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AAGjC,yBAAiB,WAAW,CAAC;IACzB,KAAK,kBAAkB,GAAG;QACtB,gBAAgB,EAAE,gBAAgB,CAAA;QAClC,WAAW,EAAE,WAAW,CAAA;QACxB,aAAa,EAAE,mBAAmB,CAAA;QAClC,YAAY,EAAE,YAAY,CAAA;QAC1B,OAAO,EAAE,OAAO,CAAA;QAChB,OAAO,EAAE,OAAO,CAAA;QAChB,MAAM,EAAE,MAAM,CAAA;KACjB,CAAA;IAED,MAAM,CAAC,MAAM,KAAK,GACd,0FAAwF,kBAAkB,KACxG,
|
|
1
|
+
{"version":3,"file":"RecordAudio.d.ts","sourceRoot":"","sources":["../../src/capture/RecordAudio.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2C,UAAU,EAAmB,MAAM,kBAAkB,CAAA;AAGvG,OAAO,EAAa,mBAAmB,EAAY,MAAM,0BAA0B,CAAA;AACnF,OAAO,EAAC,OAAO,EAAC,MAAM,YAAY,CAAA;AAClC,OAAO,EAAC,gBAAgB,EAAC,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AAGjC,yBAAiB,WAAW,CAAC;IACzB,KAAK,kBAAkB,GAAG;QACtB,gBAAgB,EAAE,gBAAgB,CAAA;QAClC,WAAW,EAAE,WAAW,CAAA;QACxB,aAAa,EAAE,mBAAmB,CAAA;QAClC,YAAY,EAAE,YAAY,CAAA;QAC1B,OAAO,EAAE,OAAO,CAAA;QAChB,OAAO,EAAE,OAAO,CAAA;QAChB,MAAM,EAAE,MAAM,CAAA;KACjB,CAAA;IAED,MAAM,CAAC,MAAM,KAAK,GACd,0FAAwF,kBAAkB,KACxG,UAwEL,CAAA;;CACJ"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Option, quantizeCeil, quantizeFloor, Terminable, Terminator, UUID } from "@opendaw/lib-std";
|
|
2
2
|
import { dbToGain, PPQN } from "@opendaw/lib-dsp";
|
|
3
|
-
import { AudioFileBox, AudioRegionBox } from "@opendaw/studio-boxes";
|
|
3
|
+
import { AudioFileBox, AudioRegionBox, ValueEventCollectionBox } from "@opendaw/studio-boxes";
|
|
4
4
|
import { ColorCodes, TrackType } from "@opendaw/studio-adapters";
|
|
5
5
|
import { RecordTrack } from "./RecordTrack";
|
|
6
6
|
export var RecordAudio;
|
|
@@ -30,8 +30,10 @@ export var RecordAudio;
|
|
|
30
30
|
.replaceAll("Z", "");
|
|
31
31
|
const fileName = `Recording-${fileDateString}`;
|
|
32
32
|
const fileBox = AudioFileBox.create(boxGraph, uuid, box => box.fileName.setValue(fileName));
|
|
33
|
+
const collectionBox = ValueEventCollectionBox.create(boxGraph, UUID.generate());
|
|
33
34
|
const regionBox = AudioRegionBox.create(boxGraph, UUID.generate(), box => {
|
|
34
35
|
box.file.refer(fileBox);
|
|
36
|
+
box.events.refer(collectionBox.owners);
|
|
35
37
|
box.regions.refer(trackBox.regions);
|
|
36
38
|
box.position.setValue(position);
|
|
37
39
|
box.hue.setValue(ColorCodes.forTrackType(TrackType.Audio));
|
|
@@ -123,7 +123,7 @@ export class CloudBackupProjects {
|
|
|
123
123
|
const uuid = UUID.parse(uuidAsString);
|
|
124
124
|
const path = `${CloudBackupProjects.RemotePath}/${uuidAsString}`;
|
|
125
125
|
this.#log(`Downloading project '${meta.name}'`);
|
|
126
|
-
const files = await Promises.guardedRetry(() => this.#cloudHandler.list(path), network.
|
|
126
|
+
const files = await Promises.guardedRetry(() => this.#cloudHandler.list(path), network.defaultRetry);
|
|
127
127
|
const hasProjectFile = files.includes("project.od");
|
|
128
128
|
const hasMetaFile = files.includes("meta.json");
|
|
129
129
|
if (!hasProjectFile || !hasMetaFile) {
|
|
@@ -144,13 +144,13 @@ export class CloudBackupProjects {
|
|
|
144
144
|
const projectPath = `${path}/project.od`;
|
|
145
145
|
const metaPath = `${path}/meta.json`;
|
|
146
146
|
const coverPath = `${path}/image.bin`;
|
|
147
|
-
const projectArrayBuffer = await Promises.guardedRetry(() => this.#cloudHandler.download(projectPath), network.
|
|
148
|
-
const metaArrayBuffer = await Promises.guardedRetry(() => this.#cloudHandler.download(metaPath), network.
|
|
147
|
+
const projectArrayBuffer = await Promises.guardedRetry(() => this.#cloudHandler.download(projectPath), network.defaultRetry);
|
|
148
|
+
const metaArrayBuffer = await Promises.guardedRetry(() => this.#cloudHandler.download(metaPath), network.defaultRetry);
|
|
149
149
|
await Workers.Opfs.write(ProjectPaths.projectFile(uuid), new Uint8Array(projectArrayBuffer));
|
|
150
150
|
await Workers.Opfs.write(ProjectPaths.projectMeta(uuid), new Uint8Array(metaArrayBuffer));
|
|
151
151
|
const hasCover = files.some(file => file.endsWith("image.bin"));
|
|
152
152
|
if (hasCover) {
|
|
153
|
-
const arrayBuffer = await Promises.guardedRetry(() => this.#cloudHandler.download(coverPath), network.
|
|
153
|
+
const arrayBuffer = await Promises.guardedRetry(() => this.#cloudHandler.download(coverPath), network.defaultRetry);
|
|
154
154
|
await Workers.Opfs.write(ProjectPaths.projectCover(uuid), new Uint8Array(arrayBuffer));
|
|
155
155
|
}
|
|
156
156
|
return uuidAsString;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CloudBackupSamples.d.ts","sourceRoot":"","sources":["../../src/cloud/CloudBackupSamples.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,SAAS,EAAE,QAAQ,EAAmB,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAGlG,OAAO,
|
|
1
|
+
{"version":3,"file":"CloudBackupSamples.d.ts","sourceRoot":"","sources":["../../src/cloud/CloudBackupSamples.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,SAAS,EAAE,QAAQ,EAAmB,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAGlG,OAAO,EAAC,MAAM,EAAC,MAAM,0BAA0B,CAAA;AAE/C,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAA;AAM3C,qBAAa,kBAAkB;;IAC3B,MAAM,CAAC,QAAQ,CAAC,UAAU,aAAY;IACtC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,SAAkC;IACnE,MAAM,CAAC,QAAQ,CAAC,eAAe,GAAI,aAAW,MAAM,EAAE,aAAW,MAAM,aAAY;IAEnF,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,GAAG,MAAM;WAE5B,KAAK,CAAC,YAAY,EAAE,YAAY,EAC1B,QAAQ,EAAE,QAAQ,CAAC,OAAO,EAC1B,GAAG,EAAE,SAAS,CAAC,MAAM,CAAC;IAgBzC,OAAO;CAoHV"}
|