@opendaw/studio-core 0.0.62 → 0.0.65
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/dawproject/DawProjectImporter.d.ts.map +1 -1
- package/dist/dawproject/DawProjectImporter.js +12 -6
- package/dist/processors.js +14 -14
- package/dist/processors.js.map +4 -4
- package/dist/project/Project.d.ts +2 -1
- package/dist/project/Project.d.ts.map +1 -1
- package/dist/project/Project.js +8 -3
- package/dist/project/ProjectMigration.d.ts +2 -1
- package/dist/project/ProjectMigration.d.ts.map +1 -1
- package/dist/project/ProjectMigration.js +36 -16
- package/dist/project/audio/AudioContentFactory.d.ts +2 -0
- package/dist/project/audio/AudioContentFactory.d.ts.map +1 -1
- package/dist/project/audio/AudioContentFactory.js +4 -4
- package/dist/project/audio/AudioContentHelpers.d.ts +2 -2
- package/dist/project/audio/AudioContentHelpers.d.ts.map +1 -1
- package/dist/project/audio/AudioContentModifier.d.ts +4 -6
- package/dist/project/audio/AudioContentModifier.d.ts.map +1 -1
- package/dist/project/audio/AudioContentModifier.js +6 -6
- package/dist/workers-main.js.map +2 -2
- package/dist/ysync/YService.d.ts.map +1 -1
- package/dist/ysync/YService.js +4 -4
- package/package.json +10 -10
|
@@ -22,7 +22,8 @@ export declare class Project implements BoxAdaptersContext, Terminable, Terminab
|
|
|
22
22
|
#private;
|
|
23
23
|
static new(env: ProjectEnv, options?: ProjectCreateOptions): Project;
|
|
24
24
|
static load(env: ProjectEnv, arrayBuffer: ArrayBuffer): Project;
|
|
25
|
-
static
|
|
25
|
+
static loadAnyVersion(env: ProjectEnv, arrayBuffer: ArrayBuffer): Promise<Project>;
|
|
26
|
+
static fromSkeleton(env: ProjectEnv, skeleton: ProjectSkeleton, followFirstUser?: boolean): Project;
|
|
26
27
|
readonly boxGraph: BoxGraph<BoxIO.TypeMap>;
|
|
27
28
|
readonly rootBox: RootBox;
|
|
28
29
|
readonly userInterfaceBoxes: ReadonlyArray<UserInterfaceBox>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Project.d.ts","sourceRoot":"","sources":["../../src/project/Project.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,IAAI,EAEJ,SAAS,EAET,UAAU,EACV,eAAe,EACf,UAAU,EACV,IAAI,EACP,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAC,UAAU,EAAE,QAAQ,EAAC,MAAM,kBAAkB,CAAA;AACrD,OAAO,EACH,WAAW,EAGX,YAAY,EACZ,KAAK,EAEL,OAAO,EACP,WAAW,EAEX,gBAAgB,EACnB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACH,WAAW,EACX,kBAAkB,EAClB,cAAc,EACd,sBAAsB,EACtB,gBAAgB,EAEhB,eAAe,EACf,cAAc,EACd,mBAAmB,EACnB,sBAAsB,EACtB,kBAAkB,EAElB,kBAAkB,EAClB,eAAe,EAClB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAC,qBAAqB,EAAE,kBAAkB,EAAC,MAAM,qBAAqB,CAAA;AAC7E,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAA;AACvC,OAAO,EAAC,KAAK,EAAC,MAAM,UAAU,CAAA;AAC9B,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAA;AAEvC,OAAO,EAAC,cAAc,EAAY,MAAM,YAAY,CAAA;AACpD,OAAO,EAAC,YAAY,EAAC,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAC,aAAa,EAAC,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAc,YAAY,EAAC,MAAM,SAAS,CAAA;AAGjD,OAAO,EAAyB,IAAI,EAAE,QAAQ,EAAW,MAAM,kBAAkB,CAAA;AAGjF,MAAM,MAAM,cAAc,GAAG;IAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IAAC,IAAI,EAAE,SAAS,CAAC,aAAa,CAAC,CAAA;CAAE,CAAA;AAExG,MAAM,MAAM,oBAAoB,GAAG;IAC/B,aAAa,CAAC,EAAE,OAAO,CAAA;CAC1B,CAAA;AAGD,qBAAa,OAAQ,YAAW,kBAAkB,EAAE,UAAU,EAAE,eAAe;;IAC3E,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO;IAYpE,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,GAAG,OAAO;
|
|
1
|
+
{"version":3,"file":"Project.d.ts","sourceRoot":"","sources":["../../src/project/Project.ts"],"names":[],"mappings":"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"}
|
package/dist/project/Project.js
CHANGED
|
@@ -29,10 +29,15 @@ export class Project {
|
|
|
29
29
|
return project;
|
|
30
30
|
}
|
|
31
31
|
static load(env, arrayBuffer) {
|
|
32
|
-
return this.
|
|
32
|
+
return this.fromSkeleton(env, ProjectSkeleton.decode(arrayBuffer));
|
|
33
33
|
}
|
|
34
|
-
static
|
|
35
|
-
|
|
34
|
+
static async loadAnyVersion(env, arrayBuffer) {
|
|
35
|
+
console.debug("loadAnyVersion");
|
|
36
|
+
const skeleton = ProjectSkeleton.decode(arrayBuffer);
|
|
37
|
+
await ProjectMigration.migrate(env, skeleton);
|
|
38
|
+
return this.fromSkeleton(env, skeleton);
|
|
39
|
+
}
|
|
40
|
+
static fromSkeleton(env, skeleton, followFirstUser = true) {
|
|
36
41
|
ProjectValidation.validate(skeleton);
|
|
37
42
|
const project = new Project(env, skeleton.boxGraph, skeleton.mandatoryBoxes);
|
|
38
43
|
if (followFirstUser) {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ProjectSkeleton } from "@opendaw/studio-adapters";
|
|
2
|
+
import { ProjectEnv } from "./ProjectEnv";
|
|
2
3
|
export declare class ProjectMigration {
|
|
3
|
-
static migrate({ boxGraph, mandatoryBoxes }: ProjectSkeleton): void
|
|
4
|
+
static migrate(env: ProjectEnv, { boxGraph, mandatoryBoxes }: ProjectSkeleton): Promise<void>;
|
|
4
5
|
}
|
|
5
6
|
//# sourceMappingURL=ProjectMigration.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProjectMigration.d.ts","sourceRoot":"","sources":["../../src/project/ProjectMigration.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAC,eAAe,EAAC,MAAM,0BAA0B,CAAA;
|
|
1
|
+
{"version":3,"file":"ProjectMigration.d.ts","sourceRoot":"","sources":["../../src/project/ProjectMigration.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAC,eAAe,EAAC,MAAM,0BAA0B,CAAA;AAIxD,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAA;AASvC,qBAAa,gBAAgB;WACZ,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,EAAC,QAAQ,EAAE,cAAc,EAAC,EAAE,eAAe;CAmOpF"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AudioFileBox,
|
|
1
|
+
import { AudioFileBox, AudioPitchStretchBox, CaptureAudioBox, CaptureMidiBox, GrooveShuffleBox, MIDIOutputBox, ValueEventCollectionBox, ValueEventCurveBox } from "@opendaw/studio-boxes";
|
|
2
2
|
import { asDefined, asInstanceOf, clamp, Float, UUID } from "@opendaw/lib-std";
|
|
3
3
|
import { AudioPlayback, AudioUnitType } from "@opendaw/studio-enums";
|
|
4
4
|
import { PPQN, TimeBase } from "@opendaw/lib-dsp";
|
|
@@ -8,8 +8,9 @@ const toSeconds = (property, bpm) => {
|
|
|
8
8
|
return PPQN.pulsesToSeconds(property.getValue(), bpm);
|
|
9
9
|
};
|
|
10
10
|
export class ProjectMigration {
|
|
11
|
-
static migrate({ boxGraph, mandatoryBoxes }) {
|
|
11
|
+
static async migrate(env, { boxGraph, mandatoryBoxes }) {
|
|
12
12
|
const { rootBox, timelineBox: { bpm } } = mandatoryBoxes;
|
|
13
|
+
console.debug("migrate project from", rootBox.created.getValue());
|
|
13
14
|
if (rootBox.groove.targetAddress.isEmpty()) {
|
|
14
15
|
console.debug("Migrate to global GrooveShuffleBox");
|
|
15
16
|
boxGraph.beginTransaction();
|
|
@@ -22,19 +23,38 @@ export class ProjectMigration {
|
|
|
22
23
|
globalShuffle.setValue("Groove Shuffle");
|
|
23
24
|
boxGraph.endTransaction();
|
|
24
25
|
}
|
|
26
|
+
const loadAudioData = (uuid) => {
|
|
27
|
+
const { promise, resolve, reject } = Promise.withResolvers();
|
|
28
|
+
const loader = env.sampleManager.getOrCreate(uuid);
|
|
29
|
+
const subscription = loader.subscribe(state => {
|
|
30
|
+
if (state.type === "loaded") {
|
|
31
|
+
subscription.terminate();
|
|
32
|
+
resolve(loader.data.unwrap("State mismatch"));
|
|
33
|
+
}
|
|
34
|
+
else if (state.type === "error") {
|
|
35
|
+
subscription.terminate();
|
|
36
|
+
reject(state.reason);
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
return promise;
|
|
40
|
+
};
|
|
25
41
|
// 1st pass (2nd pass might rely on those changes)
|
|
26
|
-
boxGraph.boxes()
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
42
|
+
for (const box of boxGraph.boxes()) {
|
|
43
|
+
await box.accept({
|
|
44
|
+
visitAudioFileBox: async (box) => {
|
|
45
|
+
const { startInSeconds, endInSeconds } = box;
|
|
46
|
+
if (isIntEncodedAsFloat(startInSeconds.getValue()) || isIntEncodedAsFloat(endInSeconds.getValue())) {
|
|
47
|
+
const audioData = await loadAudioData(box.address.uuid);
|
|
48
|
+
const seconds = audioData.numberOfFrames / audioData.sampleRate;
|
|
49
|
+
console.debug("Migrate 'AudioFileBox' to float sec", seconds.toFixed(3));
|
|
50
|
+
boxGraph.beginTransaction();
|
|
51
|
+
startInSeconds.setValue(0);
|
|
52
|
+
endInSeconds.setValue(seconds);
|
|
53
|
+
boxGraph.endTransaction();
|
|
54
|
+
}
|
|
35
55
|
}
|
|
36
|
-
}
|
|
37
|
-
}
|
|
56
|
+
});
|
|
57
|
+
}
|
|
38
58
|
// 2nd pass. We need to run on a copy, because we might add more boxes during the migration
|
|
39
59
|
boxGraph.boxes().slice().forEach(box => box.accept({
|
|
40
60
|
visitAudioRegionBox: (box) => {
|
|
@@ -70,8 +90,8 @@ export class ProjectMigration {
|
|
|
70
90
|
boxGraph.beginTransaction();
|
|
71
91
|
const file = asInstanceOf(box.file.targetVertex.unwrap(), AudioFileBox);
|
|
72
92
|
const fileDuration = file.endInSeconds.getValue() - file.startInSeconds.getValue();
|
|
73
|
-
const pitchBox =
|
|
74
|
-
AudioContentHelpers.addDefaultWarpMarkers(boxGraph, pitchBox, box.
|
|
93
|
+
const pitchBox = AudioPitchStretchBox.create(boxGraph, UUID.generate());
|
|
94
|
+
AudioContentHelpers.addDefaultWarpMarkers(boxGraph, pitchBox, box.loopDuration.getValue(), fileDuration);
|
|
75
95
|
box.timeBase.setValue(TimeBase.Musical);
|
|
76
96
|
box.playMode.refer(pitchBox);
|
|
77
97
|
box.playback.setValue("");
|
|
@@ -96,7 +116,7 @@ export class ProjectMigration {
|
|
|
96
116
|
boxGraph.beginTransaction();
|
|
97
117
|
const file = asInstanceOf(box.file.targetVertex.unwrap(), AudioFileBox);
|
|
98
118
|
const fileDuration = file.endInSeconds.getValue() - file.startInSeconds.getValue();
|
|
99
|
-
const pitchBox =
|
|
119
|
+
const pitchBox = AudioPitchStretchBox.create(boxGraph, UUID.generate());
|
|
100
120
|
AudioContentHelpers.addDefaultWarpMarkers(boxGraph, pitchBox, box.duration.getValue(), fileDuration);
|
|
101
121
|
box.timeBase.setValue(TimeBase.Musical);
|
|
102
122
|
box.playMode.refer(pitchBox);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AudioContentFactory.d.ts","sourceRoot":"","sources":["../../../src/project/audio/AudioContentFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAiB,MAAM,kBAAkB,CAAA;AACrD,OAAO,EAAa,MAAM,EAAY,MAAM,0BAA0B,CAAA;AACtE,OAAO,EAAC,GAAG,EAA6B,MAAM,kBAAkB,CAAA;AAChE,OAAO,EACH,YAAY,EACZ,YAAY,EAEZ,cAAc,EAEd,QAAQ,EAEX,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAC,iBAAiB,EAAC,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAC,QAAQ,EAAC,MAAM,kBAAkB,CAAA;AAGzC,yBAAiB,mBAAmB,CAAC;IACjC,KAAY,KAAK,GAAG;QAChB,QAAQ,EAAE,QAAQ,CAAC;QACnB,WAAW,EAAE,QAAQ,CAAC;QACtB,YAAY,EAAE,YAAY,CAAC;QAC3B,MAAM,EAAE,MAAM,CAAA;QACd,QAAQ,CAAC,EAAE,MAAM,CAAA;KACpB,CAAA;IAED,KAAY,IAAI,GAAG,KAAK,GAAG;QAAE,KAAK,EAAE,GAAG,CAAA;KAAE,CAAA;IACzC,KAAY,MAAM,GAAG,KAAK,GAAG;QAAE,QAAQ,EAAE,IAAI,CAAA;KAAE,CAAA;IAE/
|
|
1
|
+
{"version":3,"file":"AudioContentFactory.d.ts","sourceRoot":"","sources":["../../../src/project/audio/AudioContentFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAiB,MAAM,kBAAkB,CAAA;AACrD,OAAO,EAAa,MAAM,EAAY,MAAM,0BAA0B,CAAA;AACtE,OAAO,EAAC,GAAG,EAA6B,MAAM,kBAAkB,CAAA;AAChE,OAAO,EACH,YAAY,EACZ,YAAY,EAEZ,cAAc,EAEd,QAAQ,EAEX,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAC,iBAAiB,EAAC,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAC,QAAQ,EAAC,MAAM,kBAAkB,CAAA;AAGzC,yBAAiB,mBAAmB,CAAC;IACjC,KAAY,KAAK,GAAG;QAChB,QAAQ,EAAE,QAAQ,CAAC;QACnB,WAAW,EAAE,QAAQ,CAAC;QACtB,YAAY,EAAE,YAAY,CAAC;QAC3B,MAAM,EAAE,MAAM,CAAA;QACd,QAAQ,CAAC,EAAE,MAAM,CAAA;KACpB,CAAA;IAED,KAAY,IAAI,GAAG,KAAK,GAAG;QAAE,KAAK,EAAE,GAAG,CAAA;KAAE,CAAA;IACzC,KAAY,MAAM,GAAG,KAAK,GAAG;QAAE,QAAQ,EAAE,IAAI,CAAC;QAAC,QAAQ,CAAC,EAAE,IAAI,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAE/E,KAAY,kBAAkB,GAAG;QAC7B,iBAAiB,CAAC,EAAE,iBAAiB,CAAA;QACrC,YAAY,CAAC,EAAE,MAAM,CAAA;KACxB,GAAG,KAAK,CAAA;IAET,KAAY,mBAAmB,GAAG,EAA0C,GAAG,KAAK,CAAA;IAEpF,KAAY,iBAAiB,GAAG,EAA0C,GAAG,KAAK,CAAA;IAI3E,MAAM,yBAAyB,GAAI,OAAO,kBAAkB,GAAG,MAAM,KAAG,cAM9E,CAAA;IAEM,MAAM,0BAA0B,GAAI,OAAO,mBAAmB,GAAG,MAAM,KAAG,cAEhF,CAAA;IAEM,MAAM,wBAAwB,GAAI,OAAO,iBAAiB,GAAG,MAAM,KAAG,cAe5E,CAAA;IAIM,MAAM,uBAAuB,GAAI,OAAO,kBAAkB,GAAG,IAAI,KAAG,YAM1E,CAAA;IAEM,MAAM,wBAAwB,GAAI,OAAO,mBAAmB,GAAG,IAAI,KAAG,YAG5E,CAAA;IAEM,MAAM,sBAAsB,GAAI,OAAO,iBAAiB,GAAG,IAAI,KAAG,YAaxE,CAAA;CAmDJ"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { PPQN, TimeBase } from "@opendaw/lib-dsp";
|
|
2
2
|
import { ColorCodes, TrackType } from "@opendaw/studio-adapters";
|
|
3
3
|
import { panic, quantizeRound, UUID } from "@opendaw/lib-std";
|
|
4
|
-
import { AudioClipBox,
|
|
4
|
+
import { AudioClipBox, AudioPitchStretchBox, AudioRegionBox, AudioTimeStretchBox, ValueEventCollectionBox } from "@opendaw/studio-boxes";
|
|
5
5
|
import { TransientPlayMode } from "@opendaw/studio-enums";
|
|
6
6
|
import { AudioContentHelpers } from "./AudioContentHelpers";
|
|
7
7
|
export var AudioContentFactory;
|
|
@@ -15,7 +15,7 @@ export var AudioContentFactory;
|
|
|
15
15
|
}), props);
|
|
16
16
|
};
|
|
17
17
|
AudioContentFactory.createPitchStretchedRegion = (props) => {
|
|
18
|
-
return createRegionWithWarpMarkers(
|
|
18
|
+
return createRegionWithWarpMarkers(AudioPitchStretchBox.create(props.boxGraph, UUID.generate()), props);
|
|
19
19
|
};
|
|
20
20
|
AudioContentFactory.createNotStretchedRegion = (props) => {
|
|
21
21
|
const { boxGraph, targetTrack, position, audioFileBox, sample: { name, duration: durationInSeconds } } = props;
|
|
@@ -26,7 +26,7 @@ export var AudioContentFactory;
|
|
|
26
26
|
box.loopDuration.setValue(durationInSeconds);
|
|
27
27
|
box.regions.refer(targetTrack.regions);
|
|
28
28
|
box.hue.setValue(ColorCodes.forTrackType(targetTrack.type.getValue()));
|
|
29
|
-
box.label.setValue(name);
|
|
29
|
+
box.label.setValue(props.name ?? name);
|
|
30
30
|
box.file.refer(audioFileBox);
|
|
31
31
|
box.events.refer(collectionBox.owners);
|
|
32
32
|
box.timeBase.setValue(TimeBase.Seconds);
|
|
@@ -71,7 +71,7 @@ export var AudioContentFactory;
|
|
|
71
71
|
const collectionBox = ValueEventCollectionBox.create(boxGraph, UUID.generate());
|
|
72
72
|
return AudioRegionBox.create(boxGraph, UUID.generate(), box => {
|
|
73
73
|
box.position.setValue(position);
|
|
74
|
-
box.duration.setValue(durationInPPQN);
|
|
74
|
+
box.duration.setValue(props.duration ?? durationInPPQN);
|
|
75
75
|
box.loopDuration.setValue(durationInPPQN);
|
|
76
76
|
box.regions.refer(targetTrack.regions);
|
|
77
77
|
box.hue.setValue(ColorCodes.forTrackType(targetTrack.type.getValue()));
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { BoxGraph } from "@opendaw/lib-box";
|
|
2
|
-
import {
|
|
2
|
+
import { AudioPitchStretchBox, AudioTimeStretchBox } from "@opendaw/studio-boxes";
|
|
3
3
|
import { ppqn } from "@opendaw/lib-dsp";
|
|
4
4
|
export declare namespace AudioContentHelpers {
|
|
5
|
-
const addDefaultWarpMarkers: (boxGraph: BoxGraph, playMode:
|
|
5
|
+
const addDefaultWarpMarkers: (boxGraph: BoxGraph, playMode: AudioPitchStretchBox | AudioTimeStretchBox, durationInPPQN: ppqn, durationInSeconds: number) => void;
|
|
6
6
|
}
|
|
7
7
|
//# sourceMappingURL=AudioContentHelpers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AudioContentHelpers.d.ts","sourceRoot":"","sources":["../../../src/project/audio/AudioContentHelpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAC,
|
|
1
|
+
{"version":3,"file":"AudioContentHelpers.d.ts","sourceRoot":"","sources":["../../../src/project/audio/AudioContentHelpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAC,oBAAoB,EAAE,mBAAmB,EAAgB,MAAM,uBAAuB,CAAA;AAC9F,OAAO,EAAC,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAGrC,yBAAiB,mBAAmB,CAAC;IAC1B,MAAM,qBAAqB,GAAI,UAAU,QAAQ,EAClB,UAAU,oBAAoB,GAAG,mBAAmB,EACpD,gBAAgB,IAAI,EACpB,mBAAmB,MAAM,SAW9D,CAAA;CACJ"}
|
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
import { AudioClipBoxAdapter, AudioRegionBoxAdapter } from "@opendaw/studio-adapters";
|
|
2
1
|
import { Exec } from "@opendaw/lib-std";
|
|
2
|
+
import { AudioContentBoxAdapter } from "@opendaw/studio-adapters";
|
|
3
3
|
export declare namespace AudioContentModifier {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
export const toTimeStretch: (adapters: ReadonlyArray<AudioContentOwner>) => Promise<Exec>;
|
|
8
|
-
export {};
|
|
4
|
+
const toNotStretched: (adapters: ReadonlyArray<AudioContentBoxAdapter>) => Promise<Exec>;
|
|
5
|
+
const toPitchStretch: (adapters: ReadonlyArray<AudioContentBoxAdapter>) => Promise<Exec>;
|
|
6
|
+
const toTimeStretch: (adapters: ReadonlyArray<AudioContentBoxAdapter>) => Promise<Exec>;
|
|
9
7
|
}
|
|
10
8
|
//# sourceMappingURL=AudioContentModifier.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AudioContentModifier.d.ts","sourceRoot":"","sources":["../../../src/project/audio/AudioContentModifier.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"AudioContentModifier.d.ts","sourceRoot":"","sources":["../../../src/project/audio/AudioContentModifier.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,IAAI,EAAgC,MAAM,kBAAkB,CAAA;AAS/E,OAAO,EAAC,sBAAsB,EAAwB,MAAM,0BAA0B,CAAA;AAItF,yBAAiB,oBAAoB,CAAC;IAC3B,MAAM,cAAc,GAAU,UAAU,aAAa,CAAC,sBAAsB,CAAC,KAAG,OAAO,CAAC,IAAI,CAOlG,CAAA;IAEM,MAAM,cAAc,GAAU,UAAU,aAAa,CAAC,sBAAsB,CAAC,KAAG,OAAO,CAAC,IAAI,CA2BlG,CAAA;IAEM,MAAM,aAAa,GAAU,UAAU,aAAa,CAAC,sBAAsB,CAAC,KAAG,OAAO,CAAC,IAAI,CA2CjG,CAAA;CA2BJ"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { AudioRegionBoxAdapter } from "@opendaw/studio-adapters";
|
|
2
1
|
import { EmptyExec, isDefined, isInstanceOf, UUID } from "@opendaw/lib-std";
|
|
3
2
|
import { TimeBase } from "@opendaw/lib-dsp";
|
|
4
|
-
import {
|
|
3
|
+
import { AudioPitchStretchBox, AudioTimeStretchBox, TransientMarkerBox, WarpMarkerBox } from "@opendaw/studio-boxes";
|
|
4
|
+
import { AudioRegionBoxAdapter } from "@opendaw/studio-adapters";
|
|
5
5
|
import { AudioContentHelpers } from "./AudioContentHelpers";
|
|
6
6
|
import { Workers } from "../../Workers";
|
|
7
7
|
export var AudioContentModifier;
|
|
8
8
|
(function (AudioContentModifier) {
|
|
9
9
|
AudioContentModifier.toNotStretched = async (adapters) => {
|
|
10
|
-
const audioAdapters = adapters.filter(adapter => !adapter.
|
|
10
|
+
const audioAdapters = adapters.filter(adapter => !adapter.isPlayModeNoStretch);
|
|
11
11
|
if (audioAdapters.length === 0) {
|
|
12
12
|
return EmptyExec;
|
|
13
13
|
}
|
|
@@ -17,14 +17,14 @@ export var AudioContentModifier;
|
|
|
17
17
|
});
|
|
18
18
|
};
|
|
19
19
|
AudioContentModifier.toPitchStretch = async (adapters) => {
|
|
20
|
-
const audioAdapters = adapters.filter(adapter => adapter.
|
|
20
|
+
const audioAdapters = adapters.filter(adapter => adapter.asPlayModePitchStretch.isEmpty());
|
|
21
21
|
if (audioAdapters.length === 0) {
|
|
22
22
|
return EmptyExec;
|
|
23
23
|
}
|
|
24
24
|
return () => audioAdapters.forEach((adapter) => {
|
|
25
25
|
const optTimeStretch = adapter.asPlayModeTimeStretch;
|
|
26
26
|
const boxGraph = adapter.box.graph;
|
|
27
|
-
const pitchStretch =
|
|
27
|
+
const pitchStretch = AudioPitchStretchBox.create(boxGraph, UUID.generate());
|
|
28
28
|
adapter.box.playMode.refer(pitchStretch);
|
|
29
29
|
if (optTimeStretch.nonEmpty()) {
|
|
30
30
|
const timeStretch = optTimeStretch.unwrap();
|
|
@@ -63,7 +63,7 @@ export var AudioContentModifier;
|
|
|
63
63
|
return { adapter };
|
|
64
64
|
}));
|
|
65
65
|
return () => tasks.forEach(({ adapter, transients }) => {
|
|
66
|
-
const optPitchStretch = adapter.
|
|
66
|
+
const optPitchStretch = adapter.asPlayModePitchStretch;
|
|
67
67
|
const boxGraph = adapter.box.graph;
|
|
68
68
|
const timeStretch = AudioTimeStretchBox.create(boxGraph, UUID.generate());
|
|
69
69
|
adapter.box.playMode.refer(timeStretch);
|