@opendaw/studio-core 0.0.63 → 0.0.66

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.
@@ -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 skeleton(env: ProjectEnv, skeleton: ProjectSkeleton, followFirstUser?: boolean): Project;
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":"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"}
1
+ {"version":3,"file":"Project.d.ts","sourceRoot":"","sources":["../../src/project/Project.ts"],"names":[],"mappings":"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"}
@@ -29,10 +29,15 @@ export class Project {
29
29
  return project;
30
30
  }
31
31
  static load(env, arrayBuffer) {
32
- return this.skeleton(env, ProjectSkeleton.decode(arrayBuffer));
32
+ return this.fromSkeleton(env, ProjectSkeleton.decode(arrayBuffer));
33
33
  }
34
- static skeleton(env, skeleton, followFirstUser = true) {
35
- ProjectMigration.migrate(skeleton);
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;AAYxD,qBAAa,gBAAgB;IACzB,MAAM,CAAC,OAAO,CAAC,EAAC,QAAQ,EAAE,cAAc,EAAC,EAAE,eAAe,GAAG,IAAI;CA+MpE"}
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, AudioPitchBox, CaptureAudioBox, CaptureMidiBox, GrooveShuffleBox, MIDIOutputBox, ValueEventCollectionBox, ValueEventCurveBox } from "@opendaw/studio-boxes";
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().forEach(box => box.accept({
27
- visitAudioFileBox: (box) => {
28
- const { startInSeconds, endInSeconds } = box;
29
- if (isIntEncodedAsFloat(startInSeconds.getValue()) || isIntEncodedAsFloat(endInSeconds.getValue())) {
30
- console.debug("Migrate 'AudioFileBox' to float");
31
- boxGraph.beginTransaction();
32
- startInSeconds.setValue(Float.floatToIntBits(startInSeconds.getValue()));
33
- endInSeconds.setValue(Float.floatToIntBits(endInSeconds.getValue()));
34
- boxGraph.endTransaction();
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 = AudioPitchBox.create(boxGraph, UUID.generate());
74
- AudioContentHelpers.addDefaultWarpMarkers(boxGraph, pitchBox, box.duration.getValue(), fileDuration);
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 = AudioPitchBox.create(boxGraph, UUID.generate());
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);
@@ -17,6 +17,8 @@ export declare namespace AudioContentFactory {
17
17
  };
18
18
  type Region = Props & {
19
19
  position: ppqn;
20
+ duration?: ppqn;
21
+ name?: string;
20
22
  };
21
23
  type TimeStretchedProps = {
22
24
  transientPlayMode?: TransientPlayMode;
@@ -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/C,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
+ {"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, AudioPitchBox, AudioRegionBox, AudioTimeStretchBox, ValueEventCollectionBox } from "@opendaw/studio-boxes";
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(AudioPitchBox.create(props.boxGraph, UUID.generate()), props);
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 { AudioPitchBox, AudioTimeStretchBox } from "@opendaw/studio-boxes";
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: AudioPitchBox | AudioTimeStretchBox, durationInPPQN: ppqn, durationInSeconds: number) => void;
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,aAAa,EAAE,mBAAmB,EAAgB,MAAM,uBAAuB,CAAA;AACvF,OAAO,EAAC,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAGrC,yBAAiB,mBAAmB,CAAC;IAC1B,MAAM,qBAAqB,GAAI,UAAU,QAAQ,EAClB,UAAU,aAAa,GAAG,mBAAmB,EAC7C,gBAAgB,IAAI,EACpB,mBAAmB,MAAM,SAW9D,CAAA;CACJ"}
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
- type AudioContentOwner = AudioRegionBoxAdapter | AudioClipBoxAdapter;
5
- export const toNotStretched: (adapters: ReadonlyArray<AudioContentOwner>) => Promise<Exec>;
6
- export const toPitchStretch: (adapters: ReadonlyArray<AudioContentOwner>) => Promise<Exec>;
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,EAAC,mBAAmB,EAAE,qBAAqB,EAAC,MAAM,0BAA0B,CAAA;AACnF,OAAO,EAAY,IAAI,EAAgC,MAAM,kBAAkB,CAAA;AAY/E,yBAAiB,oBAAoB,CAAC;IAClC,KAAK,iBAAiB,GAAG,qBAAqB,GAAG,mBAAmB,CAAA;IAEpE,MAAM,CAAC,MAAM,cAAc,GAAU,UAAU,aAAa,CAAC,iBAAiB,CAAC,KAAG,OAAO,CAAC,IAAI,CAO7F,CAAA;IAED,MAAM,CAAC,MAAM,cAAc,GAAU,UAAU,aAAa,CAAC,iBAAiB,CAAC,KAAG,OAAO,CAAC,IAAI,CA2B7F,CAAA;IAED,MAAM,CAAC,MAAM,aAAa,GAAU,UAAU,aAAa,CAAC,iBAAiB,CAAC,KAAG,OAAO,CAAC,IAAI,CA2C5F,CAAA;;CA2BJ"}
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 { AudioPitchBox, AudioTimeStretchBox, TransientMarkerBox, WarpMarkerBox } from "@opendaw/studio-boxes";
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.isPlayModeNoWarp);
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.asPlayModePitch.isEmpty());
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 = AudioPitchBox.create(boxGraph, UUID.generate());
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.asPlayModePitch;
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);