@opendaw/studio-core 0.0.56 → 0.0.57
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AudioOfflineRenderer.d.ts.map +1 -1
- package/dist/AudioOfflineRenderer.js +30 -17
- 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 +40 -27
- package/dist/EffectFactory.d.ts +3 -2
- package/dist/EffectFactory.d.ts.map +1 -1
- package/dist/Engine.d.ts +2 -0
- package/dist/Engine.d.ts.map +1 -1
- package/dist/EngineFacade.d.ts +2 -0
- package/dist/EngineFacade.d.ts.map +1 -1
- package/dist/EngineFacade.js +2 -0
- package/dist/EngineWorklet.d.ts +2 -0
- package/dist/EngineWorklet.d.ts.map +1 -1
- package/dist/EngineWorklet.js +13 -1
- package/dist/ExternalLib.d.ts +6 -0
- package/dist/ExternalLib.d.ts.map +1 -0
- package/dist/ExternalLib.js +11 -0
- package/dist/FilePickerAcceptTypes.d.ts +1 -0
- package/dist/FilePickerAcceptTypes.d.ts.map +1 -1
- package/dist/FilePickerAcceptTypes.js +4 -0
- package/dist/Preferences.d.ts +2 -0
- package/dist/Preferences.d.ts.map +1 -1
- package/dist/Preferences.js +2 -1
- package/dist/capture/RecordAudio.d.ts +1 -1
- package/dist/capture/RecordAudio.d.ts.map +1 -1
- package/dist/capture/RecordAudio.js +4 -5
- package/dist/capture/RecordMidi.d.ts +1 -1
- package/dist/capture/RecordMidi.d.ts.map +1 -1
- package/dist/capture/RecordMidi.js +1 -2
- package/dist/capture/Recording.js +2 -2
- package/dist/dawproject/AudioUnitExportLayout.d.ts.map +1 -1
- package/dist/dawproject/AudioUnitExportLayout.js +1 -1
- package/dist/dawproject/BuiltinDevices.d.ts +3 -3
- package/dist/dawproject/BuiltinDevices.d.ts.map +1 -1
- package/dist/dawproject/BuiltinDevices.js +1 -1
- package/dist/dawproject/DawProject.d.ts +3 -3
- package/dist/dawproject/DawProject.d.ts.map +1 -1
- package/dist/dawproject/DawProject.js +6 -5
- package/dist/dawproject/DawProjectExporter.d.ts +2 -2
- package/dist/dawproject/DawProjectExporter.d.ts.map +1 -1
- package/dist/dawproject/DawProjectExporter.js +5 -6
- package/dist/dawproject/DawProjectExporter.test.js +24 -28
- package/dist/dawproject/DawProjectImporter.d.ts.map +1 -1
- package/dist/dawproject/DawProjectImporter.js +3 -6
- package/dist/dawproject/DawProjectService.d.ts.map +1 -1
- package/dist/dawproject/DawProjectService.js +11 -1
- package/dist/dawproject/DeviceIO.d.ts +1 -1
- package/dist/dawproject/DeviceIO.d.ts.map +1 -1
- package/dist/dawproject/DeviceIO.js +2 -2
- package/dist/index.d.ts +1 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -9
- package/dist/processors.js +19 -17
- package/dist/processors.js.map +4 -4
- package/dist/project/Project.d.ts +2 -2
- package/dist/project/Project.d.ts.map +1 -1
- package/dist/project/Project.js +18 -64
- package/dist/project/ProjectApi.d.ts +5 -8
- package/dist/project/ProjectApi.d.ts.map +1 -1
- package/dist/project/ProjectApi.js +8 -59
- package/dist/project/ProjectBundle.d.ts.map +1 -1
- package/dist/project/ProjectBundle.js +3 -2
- package/dist/project/ProjectMigration.d.ts.map +1 -1
- package/dist/project/ProjectMigration.js +64 -3
- package/dist/project/ProjectStorage.js +2 -2
- package/dist/project/index.d.ts +0 -1
- package/dist/project/index.d.ts.map +1 -1
- package/dist/project/index.js +0 -1
- package/dist/samples/OpenSampleAPI.d.ts.map +1 -1
- package/dist/samples/OpenSampleAPI.js +6 -0
- package/dist/samples/SampleService.js +1 -1
- package/dist/soundfont/DefaultSoundfontLoader.d.ts.map +1 -1
- package/dist/soundfont/DefaultSoundfontLoader.js +3 -2
- package/dist/soundfont/SoundfontService.d.ts.map +1 -1
- package/dist/soundfont/SoundfontService.js +2 -2
- package/dist/ui/RegionClipResolver.d.ts +37 -0
- package/dist/ui/RegionClipResolver.d.ts.map +1 -0
- package/dist/ui/RegionClipResolver.js +179 -0
- package/dist/ui/RegionClipResolver.test.d.ts +2 -0
- package/dist/ui/RegionClipResolver.test.d.ts.map +1 -0
- package/dist/ui/RegionClipResolver.test.js +166 -0
- package/dist/ui/RegionModifyStrategies.d.ts +25 -0
- package/dist/ui/RegionModifyStrategies.d.ts.map +1 -0
- package/dist/ui/RegionModifyStrategies.js +25 -0
- package/dist/ui/index.d.ts +2 -0
- package/dist/ui/index.d.ts.map +1 -1
- package/dist/ui/index.js +2 -0
- package/dist/workers-main.js +4 -2
- package/dist/workers-main.js.map +3 -3
- package/dist/ysync/YService.js +2 -2
- package/package.json +15 -15
- package/dist/AudioUnitOrdering.d.ts +0 -3
- package/dist/AudioUnitOrdering.d.ts.map +0 -1
- package/dist/AudioUnitOrdering.js +0 -7
- package/dist/ColorCodes.d.ts +0 -7
- package/dist/ColorCodes.d.ts.map +0 -1
- package/dist/ColorCodes.js +0 -32
- package/dist/Colors.d.ts +0 -15
- package/dist/Colors.d.ts.map +0 -1
- package/dist/Colors.js +0 -23
- package/dist/InstrumentBox.d.ts +0 -3
- package/dist/InstrumentBox.d.ts.map +0 -1
- package/dist/InstrumentBox.js +0 -1
- package/dist/InstrumentFactories.d.ts +0 -33
- package/dist/InstrumentFactories.d.ts.map +0 -1
- package/dist/InstrumentFactories.js +0 -122
- package/dist/InstrumentFactory.d.ts +0 -13
- package/dist/InstrumentFactory.d.ts.map +0 -1
- package/dist/InstrumentFactory.js +0 -1
- package/dist/InstrumentOptions.d.ts +0 -9
- package/dist/InstrumentOptions.d.ts.map +0 -1
- package/dist/InstrumentOptions.js +0 -1
- package/dist/InstrumentProduct.d.ts +0 -8
- package/dist/InstrumentProduct.d.ts.map +0 -1
- package/dist/InstrumentProduct.js +0 -1
- package/dist/project/ProjectUtils.d.ts +0 -12
- package/dist/project/ProjectUtils.d.ts.map +0 -1
- package/dist/project/ProjectUtils.js +0 -153
- package/dist/utils/AutofitUtils.d.ts +0 -7
- package/dist/utils/AutofitUtils.d.ts.map +0 -1
- package/dist/utils/AutofitUtils.js +0 -78
- package/dist/utils/index.d.ts +0 -2
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/index.js +0 -1
|
@@ -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,EAGH,GAAG,EACH,MAAM,EAKT,MAAM,kBAAkB,CAAA;AAGzB,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,aAAY,GAAY,KAAG,OAAO,CAAC,WAAW,CA+CzE,CAAA;CACJ"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { DefaultObservableValue, panic, RuntimeNotifier, TimeSpan } from "@opendaw/lib-std";
|
|
2
|
-
import { PPQN } from "@opendaw/lib-dsp";
|
|
1
|
+
import { DefaultObservableValue, Errors, panic, RuntimeNotifier, Terminator, TimeSpan } from "@opendaw/lib-std";
|
|
3
2
|
import { AnimationFrame } from "@opendaw/lib-dom";
|
|
4
3
|
import { Wait } from "@opendaw/lib-runtime";
|
|
5
4
|
import { ExportStemsConfiguration } from "@opendaw/studio-adapters";
|
|
@@ -11,19 +10,20 @@ export var AudioOfflineRenderer;
|
|
|
11
10
|
if (numStems === 0) {
|
|
12
11
|
return panic("Nothing to export");
|
|
13
12
|
}
|
|
14
|
-
const
|
|
15
|
-
const
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
const
|
|
13
|
+
const { promise, reject, resolve } = Promise.withResolvers();
|
|
14
|
+
const projectCopy = source.copy();
|
|
15
|
+
const terminator = new Terminator();
|
|
16
|
+
const progress = terminator.own(new DefaultObservableValue(0.0));
|
|
17
|
+
projectCopy.boxGraph.beginTransaction();
|
|
18
|
+
projectCopy.timelineBox.loopArea.enabled.setValue(false);
|
|
19
|
+
projectCopy.boxGraph.endTransaction();
|
|
20
|
+
const durationInPulses = projectCopy.timelineBox.durationInPulses.getValue();
|
|
21
|
+
const numSamples = Math.ceil(projectCopy.tempoMap.intervalToSeconds(0, durationInPulses) * sampleRate);
|
|
22
22
|
const context = new OfflineAudioContext(numStems * 2, numSamples, sampleRate);
|
|
23
23
|
const durationInSeconds = numSamples / sampleRate;
|
|
24
24
|
const worklets = await AudioWorklets.createFor(context);
|
|
25
25
|
const engineWorklet = worklets.createEngine({
|
|
26
|
-
project:
|
|
26
|
+
project: projectCopy,
|
|
27
27
|
exportConfiguration: optExportConfiguration.unwrapOrUndefined()
|
|
28
28
|
});
|
|
29
29
|
engineWorklet.play();
|
|
@@ -32,11 +32,24 @@ export var AudioOfflineRenderer;
|
|
|
32
32
|
while (!await engineWorklet.queryLoadingComplete()) {
|
|
33
33
|
await Wait.timeSpan(TimeSpan.seconds(1));
|
|
34
34
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
35
|
+
// Start rendering...
|
|
36
|
+
let cancelled = false;
|
|
37
|
+
terminator.ownAll(projectCopy, RuntimeNotifier.progress({
|
|
38
|
+
headline: "Rendering...", progress, cancel: () => {
|
|
39
|
+
engineWorklet.stop(true);
|
|
40
|
+
engineWorklet.sleep();
|
|
41
|
+
terminator.terminate();
|
|
42
|
+
cancelled = true;
|
|
43
|
+
reject(Errors.AbortError);
|
|
44
|
+
}
|
|
45
|
+
}), AnimationFrame.add(() => progress.setValue(context.currentTime / durationInSeconds)));
|
|
46
|
+
context.startRendering().then(buffer => {
|
|
47
|
+
console.debug(`rendering complete. cancelled: ${cancelled}`);
|
|
48
|
+
if (!cancelled) {
|
|
49
|
+
terminator.terminate();
|
|
50
|
+
resolve(buffer);
|
|
51
|
+
}
|
|
52
|
+
}, reason => reject(reason));
|
|
53
|
+
return promise;
|
|
41
54
|
};
|
|
42
55
|
})(AudioOfflineRenderer || (AudioOfflineRenderer = {}));
|
package/dist/EffectBox.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { ArpeggioDeviceBox, CompressorDeviceBox, CrusherDeviceBox, DelayDeviceBox, FoldDeviceBox, ModularDeviceBox, PitchDeviceBox, RevampDeviceBox, ReverbDeviceBox, StereoToolDeviceBox, UnknownAudioEffectDeviceBox, UnknownMidiEffectDeviceBox, VelocityDeviceBox, ZeitgeistDeviceBox } from "@opendaw/studio-boxes";
|
|
2
|
-
export type EffectBox = ArpeggioDeviceBox | PitchDeviceBox | VelocityDeviceBox | ZeitgeistDeviceBox | UnknownMidiEffectDeviceBox | DelayDeviceBox | ReverbDeviceBox | RevampDeviceBox | StereoToolDeviceBox | ModularDeviceBox | UnknownAudioEffectDeviceBox | CompressorDeviceBox | CrusherDeviceBox | FoldDeviceBox;
|
|
1
|
+
import { ArpeggioDeviceBox, CompressorDeviceBox, CrusherDeviceBox, DelayDeviceBox, TidalDeviceBox, FoldDeviceBox, ModularDeviceBox, PitchDeviceBox, RevampDeviceBox, ReverbDeviceBox, StereoToolDeviceBox, 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;
|
|
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,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,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,
|
|
1
|
+
{"version":3,"file":"EffectBox.d.ts","sourceRoot":"","sources":["../src/EffectBox.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,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,CAAA"}
|
|
@@ -10,6 +10,7 @@ export declare namespace EffectFactories {
|
|
|
10
10
|
const Reverb: EffectFactory;
|
|
11
11
|
const Crusher: EffectFactory;
|
|
12
12
|
const Fold: EffectFactory;
|
|
13
|
+
const Tidal: EffectFactory;
|
|
13
14
|
const Revamp: EffectFactory;
|
|
14
15
|
const Modular: EffectFactory;
|
|
15
16
|
const MidiNamed: {
|
|
@@ -26,6 +27,7 @@ export declare namespace EffectFactories {
|
|
|
26
27
|
Revamp: EffectFactory;
|
|
27
28
|
Crusher: EffectFactory;
|
|
28
29
|
Fold: EffectFactory;
|
|
30
|
+
Tidal: EffectFactory;
|
|
29
31
|
Modular: EffectFactory;
|
|
30
32
|
};
|
|
31
33
|
const MidiList: ReadonlyArray<Readonly<EffectFactory>>;
|
|
@@ -38,6 +40,7 @@ export declare namespace EffectFactories {
|
|
|
38
40
|
Revamp: EffectFactory;
|
|
39
41
|
Crusher: EffectFactory;
|
|
40
42
|
Fold: EffectFactory;
|
|
43
|
+
Tidal: EffectFactory;
|
|
41
44
|
Modular: EffectFactory;
|
|
42
45
|
Arpeggio: EffectFactory;
|
|
43
46
|
Pitch: 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":"AAsBA,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,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;;;;;;;;;;KAAiF,CAAA;IACjG,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,6 +1,6 @@
|
|
|
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, VelocityDeviceBox, ZeitgeistDeviceBox } from "@opendaw/studio-boxes";
|
|
3
|
-
import { IconSymbol } from "@opendaw/studio-
|
|
2
|
+
import { ArpeggioDeviceBox, CompressorDeviceBox, CrusherDeviceBox, DelayDeviceBox, FoldDeviceBox, GrooveShuffleBox, ModularAudioInputBox, ModularAudioOutputBox, ModularBox, ModularDeviceBox, ModuleConnectionBox, PitchDeviceBox, RevampDeviceBox, ReverbDeviceBox, StereoToolDeviceBox, TidalDeviceBox, VelocityDeviceBox, ZeitgeistDeviceBox } from "@opendaw/studio-boxes";
|
|
3
|
+
import { IconSymbol } from "@opendaw/studio-enums";
|
|
4
4
|
import { EffectParameterDefaults } from "./EffectParameterDefaults";
|
|
5
5
|
export var EffectFactories;
|
|
6
6
|
(function (EffectFactories) {
|
|
@@ -10,10 +10,10 @@ export var EffectFactories;
|
|
|
10
10
|
description: "Generates rhythmic note sequences from chords",
|
|
11
11
|
separatorBefore: false,
|
|
12
12
|
type: "midi",
|
|
13
|
-
create: ({ boxGraph },
|
|
13
|
+
create: ({ boxGraph }, hostField, index) => ArpeggioDeviceBox.create(boxGraph, UUID.generate(), box => {
|
|
14
14
|
box.label.setValue("Arpeggio");
|
|
15
15
|
box.index.setValue(index);
|
|
16
|
-
box.host.refer(
|
|
16
|
+
box.host.refer(hostField);
|
|
17
17
|
})
|
|
18
18
|
};
|
|
19
19
|
EffectFactories.Pitch = {
|
|
@@ -22,10 +22,10 @@ export var EffectFactories;
|
|
|
22
22
|
description: "Shifts the pitch of incoming notes",
|
|
23
23
|
separatorBefore: false,
|
|
24
24
|
type: "midi",
|
|
25
|
-
create: ({ boxGraph },
|
|
25
|
+
create: ({ boxGraph }, hostField, index) => PitchDeviceBox.create(boxGraph, UUID.generate(), box => {
|
|
26
26
|
box.label.setValue("Pitch");
|
|
27
27
|
box.index.setValue(index);
|
|
28
|
-
box.host.refer(
|
|
28
|
+
box.host.refer(hostField);
|
|
29
29
|
})
|
|
30
30
|
};
|
|
31
31
|
EffectFactories.Velocity = {
|
|
@@ -35,10 +35,10 @@ export var EffectFactories;
|
|
|
35
35
|
manualPage: "manuals/devices/midi/velocity",
|
|
36
36
|
separatorBefore: false,
|
|
37
37
|
type: "midi",
|
|
38
|
-
create: ({ boxGraph },
|
|
38
|
+
create: ({ boxGraph }, hostField, index) => VelocityDeviceBox.create(boxGraph, UUID.generate(), box => {
|
|
39
39
|
box.label.setValue("Velocity");
|
|
40
40
|
box.index.setValue(index);
|
|
41
|
-
box.host.refer(
|
|
41
|
+
box.host.refer(hostField);
|
|
42
42
|
})
|
|
43
43
|
};
|
|
44
44
|
EffectFactories.Zeitgeist = {
|
|
@@ -47,7 +47,7 @@ export var EffectFactories;
|
|
|
47
47
|
description: "Distorts space and time",
|
|
48
48
|
separatorBefore: false,
|
|
49
49
|
type: "midi",
|
|
50
|
-
create: ({ boxGraph, rootBoxAdapter },
|
|
50
|
+
create: ({ boxGraph, rootBoxAdapter }, hostField, index) => {
|
|
51
51
|
const useGlobal = false; // TODO First Zeitgeist should be true
|
|
52
52
|
const shuffleBox = useGlobal
|
|
53
53
|
? rootBoxAdapter.groove.box
|
|
@@ -59,7 +59,7 @@ export var EffectFactories;
|
|
|
59
59
|
box.label.setValue("Zeitgeist");
|
|
60
60
|
box.groove.refer(shuffleBox);
|
|
61
61
|
box.index.setValue(index);
|
|
62
|
-
box.host.refer(
|
|
62
|
+
box.host.refer(hostField);
|
|
63
63
|
});
|
|
64
64
|
}
|
|
65
65
|
};
|
|
@@ -69,10 +69,10 @@ export var EffectFactories;
|
|
|
69
69
|
description: "Computes a stereo transformation matrix with volume, panning, phase inversion and stereo width.",
|
|
70
70
|
separatorBefore: false,
|
|
71
71
|
type: "audio",
|
|
72
|
-
create: ({ boxGraph },
|
|
72
|
+
create: ({ boxGraph }, hostField, index) => StereoToolDeviceBox.create(boxGraph, UUID.generate(), box => {
|
|
73
73
|
box.label.setValue("Stereo Tool");
|
|
74
74
|
box.index.setValue(index);
|
|
75
|
-
box.host.refer(
|
|
75
|
+
box.host.refer(hostField);
|
|
76
76
|
})
|
|
77
77
|
};
|
|
78
78
|
EffectFactories.Delay = {
|
|
@@ -81,10 +81,10 @@ export var EffectFactories;
|
|
|
81
81
|
description: "Echoes the input signal with time-based repeats",
|
|
82
82
|
separatorBefore: false,
|
|
83
83
|
type: "audio",
|
|
84
|
-
create: ({ boxGraph },
|
|
84
|
+
create: ({ boxGraph }, hostField, index) => DelayDeviceBox.create(boxGraph, UUID.generate(), box => {
|
|
85
85
|
box.label.setValue("Delay");
|
|
86
86
|
box.index.setValue(index);
|
|
87
|
-
box.host.refer(
|
|
87
|
+
box.host.refer(hostField);
|
|
88
88
|
})
|
|
89
89
|
};
|
|
90
90
|
EffectFactories.Compressor = {
|
|
@@ -93,10 +93,10 @@ export var EffectFactories;
|
|
|
93
93
|
description: "Reduces the dynamic range by attenuating signals above a threshold",
|
|
94
94
|
separatorBefore: false,
|
|
95
95
|
type: "audio",
|
|
96
|
-
create: ({ boxGraph },
|
|
96
|
+
create: ({ boxGraph }, hostField, index) => CompressorDeviceBox.create(boxGraph, UUID.generate(), box => {
|
|
97
97
|
box.label.setValue("Compressor");
|
|
98
98
|
box.index.setValue(index);
|
|
99
|
-
box.host.refer(
|
|
99
|
+
box.host.refer(hostField);
|
|
100
100
|
})
|
|
101
101
|
};
|
|
102
102
|
EffectFactories.Reverb = {
|
|
@@ -105,11 +105,11 @@ export var EffectFactories;
|
|
|
105
105
|
description: "Simulates space and depth with reflections",
|
|
106
106
|
separatorBefore: false,
|
|
107
107
|
type: "audio",
|
|
108
|
-
create: ({ boxGraph },
|
|
108
|
+
create: ({ boxGraph }, hostField, index) => ReverbDeviceBox.create(boxGraph, UUID.generate(), box => {
|
|
109
109
|
box.label.setValue("Reverb");
|
|
110
110
|
box.preDelay.setInitValue(0.001);
|
|
111
111
|
box.index.setValue(index);
|
|
112
|
-
box.host.refer(
|
|
112
|
+
box.host.refer(hostField);
|
|
113
113
|
})
|
|
114
114
|
};
|
|
115
115
|
EffectFactories.Crusher = {
|
|
@@ -118,10 +118,10 @@ export var EffectFactories;
|
|
|
118
118
|
description: "Degrates the audio signal",
|
|
119
119
|
separatorBefore: false,
|
|
120
120
|
type: "audio",
|
|
121
|
-
create: ({ boxGraph },
|
|
121
|
+
create: ({ boxGraph }, hostField, index) => CrusherDeviceBox.create(boxGraph, UUID.generate(), box => {
|
|
122
122
|
box.label.setValue("Crusher");
|
|
123
123
|
box.index.setValue(index);
|
|
124
|
-
box.host.refer(
|
|
124
|
+
box.host.refer(hostField);
|
|
125
125
|
})
|
|
126
126
|
};
|
|
127
127
|
EffectFactories.Fold = {
|
|
@@ -130,10 +130,23 @@ export var EffectFactories;
|
|
|
130
130
|
description: "Folds the signal back into audio-range",
|
|
131
131
|
separatorBefore: false,
|
|
132
132
|
type: "audio",
|
|
133
|
-
create: ({ boxGraph },
|
|
133
|
+
create: ({ boxGraph }, hostField, index) => FoldDeviceBox.create(boxGraph, UUID.generate(), box => {
|
|
134
134
|
box.label.setValue("Fold");
|
|
135
135
|
box.index.setValue(index);
|
|
136
|
-
box.host.refer(
|
|
136
|
+
box.host.refer(hostField);
|
|
137
|
+
})
|
|
138
|
+
};
|
|
139
|
+
EffectFactories.Tidal = {
|
|
140
|
+
defaultName: "Tidal",
|
|
141
|
+
defaultIcon: IconSymbol.Tidal,
|
|
142
|
+
description: "Shape rhythm and space through volume and pan.",
|
|
143
|
+
separatorBefore: false,
|
|
144
|
+
type: "audio",
|
|
145
|
+
create: ({ boxGraph }, hostField, index) => TidalDeviceBox.create(boxGraph, UUID.generate(), box => {
|
|
146
|
+
box.label.setValue("Tidal");
|
|
147
|
+
box.index.setValue(index);
|
|
148
|
+
box.depth.setValue(0.75);
|
|
149
|
+
box.host.refer(hostField);
|
|
137
150
|
})
|
|
138
151
|
};
|
|
139
152
|
EffectFactories.Revamp = {
|
|
@@ -142,10 +155,10 @@ export var EffectFactories;
|
|
|
142
155
|
description: "Shapes the frequency balance of the sound",
|
|
143
156
|
separatorBefore: false,
|
|
144
157
|
type: "audio",
|
|
145
|
-
create: ({ boxGraph },
|
|
158
|
+
create: ({ boxGraph }, hostField, index) => RevampDeviceBox.create(boxGraph, UUID.generate(), box => {
|
|
146
159
|
EffectParameterDefaults.defaultRevampDeviceBox(box);
|
|
147
160
|
box.index.setValue(index);
|
|
148
|
-
box.host.refer(
|
|
161
|
+
box.host.refer(hostField);
|
|
149
162
|
})
|
|
150
163
|
};
|
|
151
164
|
EffectFactories.Modular = {
|
|
@@ -154,7 +167,7 @@ export var EffectFactories;
|
|
|
154
167
|
description: "",
|
|
155
168
|
separatorBefore: true,
|
|
156
169
|
type: "audio",
|
|
157
|
-
create: ({ boxGraph, rootBox, userEditingManager },
|
|
170
|
+
create: ({ boxGraph, rootBox, userEditingManager }, hostField, index) => {
|
|
158
171
|
const moduleSetupBox = ModularBox.create(boxGraph, UUID.generate(), box => {
|
|
159
172
|
box.collection.refer(rootBox.modularSetups);
|
|
160
173
|
box.label.setValue("Modular");
|
|
@@ -181,12 +194,12 @@ export var EffectFactories;
|
|
|
181
194
|
box.label.setValue("Modular");
|
|
182
195
|
box.modularSetup.refer(moduleSetupBox.device);
|
|
183
196
|
box.index.setValue(index);
|
|
184
|
-
box.host.refer(
|
|
197
|
+
box.host.refer(hostField);
|
|
185
198
|
});
|
|
186
199
|
}
|
|
187
200
|
};
|
|
188
201
|
EffectFactories.MidiNamed = { Arpeggio: EffectFactories.Arpeggio, Pitch: EffectFactories.Pitch, Velocity: EffectFactories.Velocity, Zeitgeist: EffectFactories.Zeitgeist };
|
|
189
|
-
EffectFactories.AudioNamed = { StereoTool: EffectFactories.StereoTool, Compressor: EffectFactories.Compressor, Delay: EffectFactories.Delay, Reverb: EffectFactories.Reverb, Revamp: EffectFactories.Revamp, Crusher: EffectFactories.Crusher, Fold: EffectFactories.Fold, Modular: EffectFactories.Modular };
|
|
202
|
+
EffectFactories.AudioNamed = { StereoTool: EffectFactories.StereoTool, Compressor: EffectFactories.Compressor, Delay: EffectFactories.Delay, Reverb: EffectFactories.Reverb, Revamp: EffectFactories.Revamp, Crusher: EffectFactories.Crusher, Fold: EffectFactories.Fold, Tidal: EffectFactories.Tidal, Modular: EffectFactories.Modular };
|
|
190
203
|
EffectFactories.MidiList = Object.values(EffectFactories.MidiNamed);
|
|
191
204
|
EffectFactories.AudioList = Object.values(EffectFactories.AudioNamed);
|
|
192
205
|
EffectFactories.MergedNamed = { ...EffectFactories.MidiNamed, ...EffectFactories.AudioNamed };
|
package/dist/EffectFactory.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { EffectPointerType
|
|
1
|
+
import { EffectPointerType } from "@opendaw/studio-adapters";
|
|
2
|
+
import { IconSymbol } from "@opendaw/studio-enums";
|
|
2
3
|
import { Field } from "@opendaw/lib-box";
|
|
3
4
|
import { int } from "@opendaw/lib-std";
|
|
4
5
|
import { Project } from "./project";
|
|
@@ -10,6 +11,6 @@ export interface EffectFactory {
|
|
|
10
11
|
readonly manualPage?: string;
|
|
11
12
|
readonly separatorBefore: boolean;
|
|
12
13
|
readonly type: "audio" | "midi";
|
|
13
|
-
create(project: Project,
|
|
14
|
+
create(project: Project, host: Field<EffectPointerType>, index: int): EffectBox;
|
|
14
15
|
}
|
|
15
16
|
//# sourceMappingURL=EffectFactory.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EffectFactory.d.ts","sourceRoot":"","sources":["../src/EffectFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,iBAAiB,
|
|
1
|
+
{"version":3,"file":"EffectFactory.d.ts","sourceRoot":"","sources":["../src/EffectFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,iBAAiB,EAAC,MAAM,0BAA0B,CAAA;AAC1D,OAAO,EAAC,UAAU,EAAC,MAAM,uBAAuB,CAAA;AAChD,OAAO,EAAC,KAAK,EAAC,MAAM,kBAAkB,CAAA;AACtC,OAAO,EAAC,GAAG,EAAC,MAAM,kBAAkB,CAAA;AACpC,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AACjC,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAA;AAErC,MAAM,WAAW,aAAa;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAA;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAA;IACjC,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAA;IAE/B,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,iBAAiB,CAAC,EAAE,KAAK,EAAE,GAAG,GAAG,SAAS,CAAA;CAClF"}
|
package/dist/Engine.d.ts
CHANGED
|
@@ -12,6 +12,8 @@ export interface Engine extends Terminable {
|
|
|
12
12
|
queryLoadingComplete(): Promise<boolean>;
|
|
13
13
|
stop(): void;
|
|
14
14
|
panic(): void;
|
|
15
|
+
sleep(): void;
|
|
16
|
+
wake(): void;
|
|
15
17
|
noteSignal(signal: NoteSignal): void;
|
|
16
18
|
subscribeNotes(observer: Observer<NoteSignal>): Subscription;
|
|
17
19
|
ignoreNoteRegion(uuid: UUID.Bytes): void;
|
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,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,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"}
|
|
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,eAAe,CAAC,OAAO,CAAC,CAAA;IAChD,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
|
@@ -29,6 +29,8 @@ export declare class EngineFacade implements Engine {
|
|
|
29
29
|
isReady(): Promise<void>;
|
|
30
30
|
queryLoadingComplete(): Promise<boolean>;
|
|
31
31
|
panic(): void;
|
|
32
|
+
sleep(): void;
|
|
33
|
+
wake(): void;
|
|
32
34
|
sampleRate(): number;
|
|
33
35
|
subscribeClipNotification(observer: Observer<ClipNotification>): Subscription;
|
|
34
36
|
subscribeNotes(observer: Observer<NoteSignal>): Subscription;
|
|
@@ -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;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"}
|
|
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;IAEzF,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,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/EngineFacade.js
CHANGED
|
@@ -46,6 +46,8 @@ export class EngineFacade {
|
|
|
46
46
|
return this.#worklet.mapOr(worklet => worklet.queryLoadingComplete(), Promise.resolve(false));
|
|
47
47
|
}
|
|
48
48
|
panic() { this.#worklet.ifSome(worklet => worklet.panic()); }
|
|
49
|
+
sleep() { this.#worklet.ifSome(worklet => worklet.sleep()); }
|
|
50
|
+
wake() { this.#worklet.ifSome(worklet => worklet.wake()); }
|
|
49
51
|
sampleRate() { return this.#worklet.isEmpty() ? 44_100 : this.#worklet.unwrap().context.sampleRate; }
|
|
50
52
|
subscribeClipNotification(observer) {
|
|
51
53
|
return this.#worklet.unwrap("No worklet to subscribeClipNotification").subscribeClipNotification(observer);
|
package/dist/EngineWorklet.d.ts
CHANGED
|
@@ -14,6 +14,8 @@ export declare class EngineWorklet extends AudioWorkletNode implements Engine {
|
|
|
14
14
|
prepareRecordingState(countIn: boolean): void;
|
|
15
15
|
stopRecording(): void;
|
|
16
16
|
panic(): void;
|
|
17
|
+
sleep(): void;
|
|
18
|
+
wake(): void;
|
|
17
19
|
get isPlaying(): ObservableValue<boolean>;
|
|
18
20
|
get isRecording(): ObservableValue<boolean>;
|
|
19
21
|
get isCountingIn(): ObservableValue<boolean>;
|
|
@@ -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,EACV,gBAAgB,EACnB,MAAM,0BAA0B,CAAA;AAEjC,OAAO,EAAC,MAAM,EAAC,MAAM,UAAU,CAAA;AAC/B,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AAGjC,qBAAa,aAAc,SAAQ,gBAAiB,YAAW,MAAM;;IACjE,MAAM,CAAC,EAAE,EAAE,GAAG,CAAQ;IAEtB,QAAQ,CAAC,EAAE,SAAqB;
|
|
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,EACV,gBAAgB,EACnB,MAAM,0BAA0B,CAAA;AAEjC,OAAO,EAAC,MAAM,EAAC,MAAM,UAAU,CAAA;AAC/B,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AAGjC,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;IA0ItC,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
|
@@ -18,6 +18,7 @@ export class EngineWorklet extends AudioWorkletNode {
|
|
|
18
18
|
#countInBeatsRemaining = new DefaultObservableValue(0);
|
|
19
19
|
#metronomeEnabled = new DefaultObservableValue(false);
|
|
20
20
|
#markerState = new DefaultObservableValue(null);
|
|
21
|
+
#controlFlags;
|
|
21
22
|
#notifyClipNotification;
|
|
22
23
|
#notifyNoteSignals;
|
|
23
24
|
#playingClips;
|
|
@@ -33,12 +34,14 @@ export class EngineWorklet extends AudioWorkletNode {
|
|
|
33
34
|
this.#playbackTimestamp.setValue(state.playbackTimestamp);
|
|
34
35
|
this.#position.setValue(state.position); // This must be the last to handle the state values before
|
|
35
36
|
});
|
|
37
|
+
const controlFlagsSAB = new SharedArrayBuffer(4); // 4 bytes minimum
|
|
36
38
|
super(context, "engine-processor", {
|
|
37
39
|
numberOfInputs: 0,
|
|
38
40
|
numberOfOutputs: 1,
|
|
39
41
|
outputChannelCount: [numberOfChannels],
|
|
40
42
|
processorOptions: {
|
|
41
|
-
|
|
43
|
+
syncStreamBuffer: reader.buffer,
|
|
44
|
+
controlFlagsBuffer: controlFlagsSAB,
|
|
42
45
|
project: project.toArrayBuffer(),
|
|
43
46
|
exportConfiguration,
|
|
44
47
|
options
|
|
@@ -51,6 +54,7 @@ export class EngineWorklet extends AudioWorkletNode {
|
|
|
51
54
|
this.#notifyClipNotification = this.#terminator.own(new Notifier());
|
|
52
55
|
this.#notifyNoteSignals = this.#terminator.own(new Notifier());
|
|
53
56
|
this.#playingClips = [];
|
|
57
|
+
this.#controlFlags = new Int32Array(controlFlagsSAB);
|
|
54
58
|
this.#commands = this.#terminator.own(Communicator.sender(messenger.channel("engine-commands"), dispatcher => new class {
|
|
55
59
|
play() { dispatcher.dispatchAndForget(this.play); }
|
|
56
60
|
stop(reset) { dispatcher.dispatchAndForget(this.stop, reset); }
|
|
@@ -72,6 +76,8 @@ export class EngineWorklet extends AudioWorkletNode {
|
|
|
72
76
|
return dispatcher.dispatchAndReturn(this.queryLoadingComplete);
|
|
73
77
|
}
|
|
74
78
|
panic() { dispatcher.dispatchAndForget(this.panic); }
|
|
79
|
+
sleep() { dispatcher.dispatchAndForget(this.sleep); }
|
|
80
|
+
wake() { dispatcher.dispatchAndForget(this.wake); }
|
|
75
81
|
noteSignal(signal) { dispatcher.dispatchAndForget(this.noteSignal, signal); }
|
|
76
82
|
ignoreNoteRegion(uuid) {
|
|
77
83
|
dispatcher.dispatchAndForget(this.ignoreNoteRegion, uuid);
|
|
@@ -147,6 +153,11 @@ export class EngineWorklet extends AudioWorkletNode {
|
|
|
147
153
|
prepareRecordingState(countIn) { this.#commands.prepareRecordingState(countIn); }
|
|
148
154
|
stopRecording() { this.#commands.stopRecording(); }
|
|
149
155
|
panic() { this.#commands.panic(); }
|
|
156
|
+
sleep() {
|
|
157
|
+
Atomics.store(this.#controlFlags, 0, 1);
|
|
158
|
+
this.#commands.stop(true);
|
|
159
|
+
}
|
|
160
|
+
wake() { Atomics.store(this.#controlFlags, 0, 0); }
|
|
150
161
|
get isPlaying() { return this.#isPlaying; }
|
|
151
162
|
get isRecording() { return this.#isRecording; }
|
|
152
163
|
get isCountingIn() { return this.#isCountingIn; }
|
|
@@ -178,6 +189,7 @@ export class EngineWorklet extends AudioWorkletNode {
|
|
|
178
189
|
return this.#notifyClipNotification.subscribe(observer);
|
|
179
190
|
}
|
|
180
191
|
terminate() {
|
|
192
|
+
console.debug("WORKLET.terminate");
|
|
181
193
|
this.#terminator.terminate();
|
|
182
194
|
this.disconnect();
|
|
183
195
|
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare namespace ExternalLib {
|
|
2
|
+
const JSZip: () => Promise<import("jszip")>;
|
|
3
|
+
const SoundFont2: () => Promise<typeof import("soundfont2").SoundFont2>;
|
|
4
|
+
const FFmpegWorker: () => Promise<typeof import("@opendaw/studio-core/FFmpegWorker").FFmpegWorker>;
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=ExternalLib.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExternalLib.d.ts","sourceRoot":"","sources":["../src/ExternalLib.ts"],"names":[],"mappings":"AAGA,yBAAiB,WAAW,CAAC;IAMlB,MAAM,KAAK,gCAC8C,CAAA;IAEzD,MAAM,UAAU,uDAC+C,CAAA;IAE/D,MAAM,YAAY,gFACwE,CAAA;CACpG"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Promises } from "@opendaw/lib-runtime";
|
|
2
|
+
export var ExternalLib;
|
|
3
|
+
(function (ExternalLib) {
|
|
4
|
+
const callback = (error, count) => {
|
|
5
|
+
console.debug(`ExternalLib.importFailure count: ${count}, online: ${navigator.onLine}`, error);
|
|
6
|
+
return count < 10;
|
|
7
|
+
};
|
|
8
|
+
ExternalLib.JSZip = async () => await Promises.guardedRetry(() => import("jszip").then(({ default: JSZip }) => JSZip), callback);
|
|
9
|
+
ExternalLib.SoundFont2 = async () => await Promises.guardedRetry(() => import("soundfont2").then(({ SoundFont2 }) => SoundFont2), callback);
|
|
10
|
+
ExternalLib.FFmpegWorker = async () => await Promises.guardedRetry(() => import("@opendaw/studio-core/FFmpegWorker").then(({ FFmpegWorker }) => FFmpegWorker), callback);
|
|
11
|
+
})(ExternalLib || (ExternalLib = {}));
|
|
@@ -3,6 +3,7 @@ export declare namespace FilePickerAcceptTypes {
|
|
|
3
3
|
const SoundfontFiles: FilePickerOptions;
|
|
4
4
|
const ProjectSyncLog: FilePickerOptions;
|
|
5
5
|
const ProjectFileType: FilePickerAcceptType;
|
|
6
|
+
const PresetFileType: FilePickerAcceptType;
|
|
6
7
|
const ProjectBundleFileType: FilePickerAcceptType;
|
|
7
8
|
const DawprojectFileType: FilePickerAcceptType;
|
|
8
9
|
const JsonFileType: FilePickerAcceptType;
|
|
@@ -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,qBAAqB,EAAE,oBAGnC,CAAA;IAEM,MAAM,kBAAkB,EAAE,oBAGhC,CAAA;IACM,MAAM,YAAY,EAAE,oBAG1B,CAAA;CAEJ"}
|
|
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;CAEJ"}
|
|
@@ -22,6 +22,10 @@ export var FilePickerAcceptTypes;
|
|
|
22
22
|
description: "openDAW project",
|
|
23
23
|
accept: { "application/octet-stream": [".od"] }
|
|
24
24
|
};
|
|
25
|
+
FilePickerAcceptTypes.PresetFileType = {
|
|
26
|
+
description: "openDAW preset",
|
|
27
|
+
accept: { "application/octet-stream": [".odp"] }
|
|
28
|
+
};
|
|
25
29
|
FilePickerAcceptTypes.ProjectBundleFileType = {
|
|
26
30
|
description: "openDAW project bundle",
|
|
27
31
|
accept: { "application/octet-stream": [".odb"] }
|
package/dist/Preferences.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ declare const PreferencesSchema: z.ZodObject<{
|
|
|
5
5
|
"auto-create-output-compressor": z.ZodDefault<z.ZodBoolean>;
|
|
6
6
|
"footer-show-fps-meter": z.ZodDefault<z.ZodBoolean>;
|
|
7
7
|
"footer-show-build-infos": z.ZodDefault<z.ZodBoolean>;
|
|
8
|
+
"dragging-use-pointer-lock": z.ZodDefault<z.ZodBoolean>;
|
|
8
9
|
}, z.core.$strip>;
|
|
9
10
|
export type Preferences = z.infer<typeof PreferencesSchema>;
|
|
10
11
|
export declare const Preferences: {
|
|
@@ -13,6 +14,7 @@ export declare const Preferences: {
|
|
|
13
14
|
"auto-create-output-compressor": boolean;
|
|
14
15
|
"footer-show-fps-meter": boolean;
|
|
15
16
|
"footer-show-build-infos": boolean;
|
|
17
|
+
"dragging-use-pointer-lock": boolean;
|
|
16
18
|
};
|
|
17
19
|
catchupAndSubscribe: <KEY extends keyof Preferences>(observer: Observer<Preferences[KEY]>, property: KEY) => Subscription;
|
|
18
20
|
};
|
|
@@ -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;;;;;;iBAMrB,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
|
@@ -4,7 +4,8 @@ const PreferencesSchema = z.object({
|
|
|
4
4
|
"auto-open-clips": z.boolean().default(false),
|
|
5
5
|
"auto-create-output-compressor": z.boolean().default(true),
|
|
6
6
|
"footer-show-fps-meter": z.boolean().default(false),
|
|
7
|
-
"footer-show-build-infos": z.boolean().default(false)
|
|
7
|
+
"footer-show-build-infos": z.boolean().default(false),
|
|
8
|
+
"dragging-use-pointer-lock": z.boolean().default(false),
|
|
8
9
|
});
|
|
9
10
|
export const Preferences = (() => {
|
|
10
11
|
const STORAGE_KEY = "preferences";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Terminable } from "@opendaw/lib-std";
|
|
2
2
|
import { SampleLoaderManager } from "@opendaw/studio-adapters";
|
|
3
|
-
import { Project } from "../project
|
|
3
|
+
import { Project } from "../project";
|
|
4
4
|
import { RecordingWorklet } from "../RecordingWorklet";
|
|
5
5
|
import { Capture } from "./Capture";
|
|
6
6
|
export declare namespace RecordAudio {
|
|
@@ -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,
|
|
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,UAsEL,CAAA;;CACJ"}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { Option, quantizeCeil, quantizeFloor, Terminable, Terminator, UUID } from "@opendaw/lib-std";
|
|
2
2
|
import { dbToGain, PPQN } from "@opendaw/lib-dsp";
|
|
3
3
|
import { AudioFileBox, AudioRegionBox } from "@opendaw/studio-boxes";
|
|
4
|
-
import { TrackType } from "@opendaw/studio-adapters";
|
|
4
|
+
import { ColorCodes, TrackType } from "@opendaw/studio-adapters";
|
|
5
5
|
import { RecordTrack } from "./RecordTrack";
|
|
6
|
-
import { ColorCodes } from "../ColorCodes";
|
|
7
6
|
export var RecordAudio;
|
|
8
7
|
(function (RecordAudio) {
|
|
9
8
|
RecordAudio.start = ({ recordingWorklet, mediaStream, sampleManager, audioContext, project, capture, gainDb }) => {
|
|
@@ -40,7 +39,7 @@ export var RecordAudio;
|
|
|
40
39
|
});
|
|
41
40
|
return { fileBox, regionBox };
|
|
42
41
|
});
|
|
43
|
-
const {
|
|
42
|
+
const { tempoMap, env: { audioContext: { sampleRate } } } = project;
|
|
44
43
|
terminator.ownAll(Terminable.create(() => {
|
|
45
44
|
if (recordingWorklet.numberOfFrames === 0 || recordingData.isEmpty()) {
|
|
46
45
|
console.debug("Abort recording audio.");
|
|
@@ -49,7 +48,7 @@ export var RecordAudio;
|
|
|
49
48
|
}
|
|
50
49
|
else {
|
|
51
50
|
const { regionBox: { duration }, fileBox } = recordingData.unwrap("No recording data available");
|
|
52
|
-
recordingWorklet.limit(
|
|
51
|
+
recordingWorklet.limit(Math.ceil(tempoMap.intervalToSeconds(0, duration.getValue()) * sampleRate));
|
|
53
52
|
fileBox.endInSeconds.setValue(recordingWorklet.numberOfFrames / sampleRate);
|
|
54
53
|
}
|
|
55
54
|
}), engine.position.catchupAndSubscribe(owner => {
|
|
@@ -67,7 +66,7 @@ export var RecordAudio;
|
|
|
67
66
|
const newDuration = quantizeCeil(engine.position.getValue(), beats) - regionBox.position.getValue();
|
|
68
67
|
duration.setValue(newDuration);
|
|
69
68
|
loopDuration.setValue(newDuration);
|
|
70
|
-
const totalSamples =
|
|
69
|
+
const totalSamples = Math.ceil(tempoMap.intervalToSeconds(0, newDuration) * sampleRate);
|
|
71
70
|
recordingWorklet.setFillLength(totalSamples);
|
|
72
71
|
}
|
|
73
72
|
else {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Notifier, Terminable } from "@opendaw/lib-std";
|
|
2
2
|
import { NoteSignal } from "@opendaw/studio-adapters";
|
|
3
|
-
import { Project } from "../project
|
|
3
|
+
import { Project } from "../project";
|
|
4
4
|
import { Capture } from "./Capture";
|
|
5
5
|
export declare namespace RecordMidi {
|
|
6
6
|
type RecordMidiContext = {
|