@opendaw/studio-core 0.0.54 → 0.0.55

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.
@@ -1,6 +1,6 @@
1
1
  import { Func, Procedure, Terminable, TerminableOwner, Terminator, UUID } from "@opendaw/lib-std";
2
2
  import { BoxEditing, BoxGraph } from "@opendaw/lib-box";
3
- import { AudioBusBox, AudioUnitBox, BoxIO, MIDIOutputDeviceBox, RootBox, TimelineBox, UserInterfaceBox } from "@opendaw/studio-boxes";
3
+ import { AudioBusBox, AudioUnitBox, BoxIO, RootBox, TimelineBox, UserInterfaceBox } from "@opendaw/studio-boxes";
4
4
  import { BoxAdapters, BoxAdaptersContext, ClipSequencing, ParameterFieldAdapters, ProcessorOptions, ProjectSkeleton, RootBoxAdapter, SampleLoaderManager, SoundfontLoaderManager, TimelineBoxAdapter, UserEditingManager, VertexSelection } from "@opendaw/studio-adapters";
5
5
  import { LiveStreamBroadcaster, LiveStreamReceiver } from "@opendaw/lib-fusion";
6
6
  import { ProjectEnv } from "./ProjectEnv";
@@ -59,13 +59,11 @@ export declare class Project implements BoxAdaptersContext, Terminable, Terminab
59
59
  get liveStreamBroadcaster(): LiveStreamBroadcaster;
60
60
  get signatureDuration(): ppqn;
61
61
  get skeleton(): ProjectSkeleton;
62
+ receivedMIDIFromEngine(midiDeviceId: string, data: Uint8Array, relativeTimeInMs: number): void;
62
63
  collectSampleUUIDs(): ReadonlyArray<UUID.Bytes>;
63
64
  toArrayBuffer(): ArrayBufferLike;
64
65
  copy(env?: Partial<ProjectEnv>): Project;
65
66
  invalid(): boolean;
66
- connectMIDIOutput(box: MIDIOutputDeviceBox, device: MIDIOutput): void;
67
- disconnectMIDIOutput(uuid: UUID.Bytes): void;
68
- receivedMIDIFromEngine(target: UUID.Bytes, data: Uint8Array, relativeTimeInMs: number): void;
69
67
  terminate(): void;
70
68
  }
71
69
  //# sourceMappingURL=Project.d.ts.map
@@ -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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"}
@@ -1,4 +1,4 @@
1
- import { Arrays, ByteArrayOutput, isDefined, Option, panic, safeExecute, Terminator, UUID } from "@opendaw/lib-std";
1
+ import { Arrays, ByteArrayOutput, Option, panic, safeExecute, Terminator, UUID } from "@opendaw/lib-std";
2
2
  import { BoxEditing, BoxGraph } from "@opendaw/lib-box";
3
3
  import { AudioBusBox, AudioUnitBox, BoxIO, CompressorDeviceBox, GrooveShuffleBox, RootBox, TimelineBox, UserInterfaceBox } from "@opendaw/studio-boxes";
4
4
  import { BoxAdapters, IconSymbol, ParameterFieldAdapters, ProjectDecoder, RootBoxAdapter, TimelineBoxAdapter, UnionBoxTypes, UserEditingManager, VertexSelection } from "@opendaw/studio-adapters";
@@ -9,7 +9,7 @@ import { ProjectApi } from "./ProjectApi";
9
9
  import { ProjectMigration } from "./ProjectMigration";
10
10
  import { CaptureDevices, Recording } from "../capture";
11
11
  import { EngineFacade } from "../EngineFacade";
12
- import { MIDILearning } from "../midi";
12
+ import { MidiDevices, MIDILearning } from "../midi";
13
13
  import { ProjectValidation } from "./ProjectValidation";
14
14
  import { Preferences } from "../Preferences";
15
15
  import { PPQN } from "@opendaw/lib-dsp";
@@ -102,7 +102,6 @@ export class Project {
102
102
  midiLearning;
103
103
  mixer;
104
104
  engine = new EngineFacade();
105
- #midiOutputs = UUID.newSet(({ box: { address: { uuid } } }) => uuid);
106
105
  constructor(env, boxGraph, { rootBox, userInterfaceBoxes, primaryAudioBus, primaryAudioOutputUnit, timelineBox }) {
107
106
  this.#env = env;
108
107
  this.boxGraph = boxGraph;
@@ -186,6 +185,10 @@ export class Project {
186
185
  }
187
186
  };
188
187
  }
188
+ receivedMIDIFromEngine(midiDeviceId, data, relativeTimeInMs) {
189
+ MidiDevices.get().ifSome(midiAccess => midiAccess.outputs
190
+ .get(midiDeviceId)?.send(data, performance.now() + relativeTimeInMs));
191
+ }
189
192
  collectSampleUUIDs() {
190
193
  return this.boxGraph.boxes()
191
194
  .filter(box => box.accept({ visitAudioFileBox: (_box) => true }))
@@ -218,27 +221,6 @@ export class Project {
218
221
  }
219
222
  }) ?? false);
220
223
  }
221
- connectMIDIOutput(box, device) {
222
- console.debug("connectMIDIOutput", UUID.toString(box.address.uuid), device.name, device.manufacturer);
223
- this.disconnectMIDIOutput(box.address.uuid);
224
- this.#midiOutputs.add({
225
- box, device, subscription: box.host.subscribe(pointer => {
226
- if (pointer.isEmpty()) {
227
- this.disconnectMIDIOutput(box.address.uuid);
228
- }
229
- })
230
- });
231
- }
232
- disconnectMIDIOutput(uuid) {
233
- const entry = this.#midiOutputs.removeByKeyIfExist(uuid);
234
- if (isDefined(entry)) {
235
- console.debug("disconnectMIDIOutput", UUID.toString(uuid));
236
- entry.subscription.terminate();
237
- }
238
- }
239
- receivedMIDIFromEngine(target, data, relativeTimeInMs) {
240
- this.#midiOutputs.opt(target).ifSome(({ box, device }) => device.send(data, performance.now() + relativeTimeInMs + box.delay.getValue()));
241
- }
242
224
  terminate() {
243
225
  console.debug("Project terminated");
244
226
  this.#terminator.terminate();
@@ -1 +1 @@
1
- {"version":3,"file":"ProjectMigration.d.ts","sourceRoot":"","sources":["../../src/project/ProjectMigration.ts"],"names":[],"mappings":"AAaA,OAAO,EAAC,eAAe,EAAC,MAAM,0BAA0B,CAAA;AAExD,qBAAa,gBAAgB;IACzB,MAAM,CAAC,OAAO,CAAC,EAAC,QAAQ,EAAE,cAAc,EAAC,EAAE,eAAe,GAAG,IAAI;CA4EpE"}
1
+ {"version":3,"file":"ProjectMigration.d.ts","sourceRoot":"","sources":["../../src/project/ProjectMigration.ts"],"names":[],"mappings":"AAcA,OAAO,EAAC,eAAe,EAAC,MAAM,0BAA0B,CAAA;AAKxD,qBAAa,gBAAgB;IACzB,MAAM,CAAC,OAAO,CAAC,EAAC,QAAQ,EAAE,cAAc,EAAC,EAAE,eAAe,GAAG,IAAI;CAsFpE"}
@@ -1,6 +1,7 @@
1
1
  import { CaptureAudioBox, CaptureMidiBox, GrooveShuffleBox, ValueEventCurveBox } from "@opendaw/studio-boxes";
2
- import { asDefined, asInstanceOf, clamp, UUID } from "@opendaw/lib-std";
2
+ import { asDefined, asInstanceOf, clamp, Float, UUID } from "@opendaw/lib-std";
3
3
  import { AudioUnitType } from "@opendaw/studio-enums";
4
+ const isIntEncodedAsFloat = (v) => v > 0 && v < 1e-6 && Number.isFinite(v) && (v / 1.401298464324817e-45) % 1 === 0;
4
5
  export class ProjectMigration {
5
6
  static migrate({ boxGraph, mandatoryBoxes }) {
6
7
  const { rootBox } = mandatoryBoxes;
@@ -18,6 +19,16 @@ export class ProjectMigration {
18
19
  }
19
20
  // We need to run on a copy, because we might add more boxes during the migration
20
21
  boxGraph.boxes().slice().forEach(box => box.accept({
22
+ visitAudioFileBox: (box) => {
23
+ const { startInSeconds, endInSeconds } = box;
24
+ if (isIntEncodedAsFloat(startInSeconds.getValue()) || isIntEncodedAsFloat(endInSeconds.getValue())) {
25
+ console.debug("Migrate 'AudioFileBox' to float");
26
+ boxGraph.beginTransaction();
27
+ startInSeconds.setValue(Float.floatToIntBits(startInSeconds.getValue()));
28
+ endInSeconds.setValue(Float.floatToIntBits(endInSeconds.getValue()));
29
+ boxGraph.endTransaction();
30
+ }
31
+ },
21
32
  visitZeitgeistDeviceBox: (box) => {
22
33
  if (box.groove.targetAddress.isEmpty()) {
23
34
  console.debug("Migrate 'ZeitgeistDeviceBox' to GrooveShuffleBox");
@@ -1 +1 @@
1
- {"version":3,"file":"ProjectUtils.d.ts","sourceRoot":"","sources":["../../src/project/ProjectUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,kBAAkB,CAAA;AACrC,OAAO,EAAC,YAAY,EAAgB,MAAM,0BAA0B,CAAA;AACpE,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AAcjC,OAAO,EAEH,YAAY,EAOf,MAAM,uBAAuB,CAAA;AAI9B,yBAAiB,YAAY,CAAC;IAMnB,MAAM,iBAAiB,GAAI,gBAAgB,aAAa,CAAC,YAAY,CAAC,EAC3C,eAAe,OAAO,EACtB,UAAS;QAAE,UAAU,CAAC,EAAE,OAAO,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAA;KAAO,KAAG,IAehG,CAAA;IAEM,MAAM,cAAc,GAAI,aAAa,aAAa,CAAC,YAAY,CAAC,EACxC,eAAe,OAAO,EACtB,iBAAgB,IAAU,KAAG,IAkD3D,CAAA;CAsFJ"}
1
+ {"version":3,"file":"ProjectUtils.d.ts","sourceRoot":"","sources":["../../src/project/ProjectUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,kBAAkB,CAAA;AACrC,OAAO,EAAC,YAAY,EAAgB,MAAM,0BAA0B,CAAA;AACpE,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AAcjC,OAAO,EAEH,YAAY,EAOf,MAAM,uBAAuB,CAAA;AAI9B,yBAAiB,YAAY,CAAC;IAMnB,MAAM,iBAAiB,GAAI,gBAAgB,aAAa,CAAC,YAAY,CAAC,EAC3C,eAAe,OAAO,EACtB,UAAS;QAAE,UAAU,CAAC,EAAE,OAAO,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAA;KAAO,KAAG,IAehG,CAAA;IAEM,MAAM,cAAc,GAAI,aAAa,aAAa,CAAC,YAAY,CAAC,EACxC,eAAe,OAAO,EACtB,iBAAgB,IAAU,KAAG,IAkD3D,CAAA;CA6FJ"}
@@ -37,7 +37,7 @@ export var ProjectUtils;
37
37
  console.debug(`Found ${audioUnitBoxSet.keyCount()} audioUnits`);
38
38
  console.debug(`Found ${trackBoxSet.size} tracks`);
39
39
  const audioUnitBoxes = [...audioUnitBoxSet.keys()];
40
- const { boxGraph, masterBusBox, masterAudioUnit, rootBox } = targetProject;
40
+ const { boxGraph, masterBusBox, rootBox } = targetProject;
41
41
  const excludeBox = box => (isInstanceOf(box, TrackBox) && !trackBoxSet.has(box))
42
42
  || (UnionBoxTypes.isRegionBox(box) && !regionBoxSet.has(box));
43
43
  const dependencies = audioUnitBoxes
@@ -117,6 +117,13 @@ export var ProjectUtils;
117
117
  const input = new ByteArrayInput(source.toArrayBuffer());
118
118
  const key = source.name;
119
119
  const uuid = uuidMap.get(source.address.uuid).target;
120
+ if (source instanceof AudioFileBox || source instanceof SoundfontFileBox) {
121
+ // Those boxes keep their UUID. So if they are already in the graph, we can just read them.
122
+ if (boxGraph.findBox(source.address.uuid).nonEmpty()) {
123
+ source.read(input);
124
+ return;
125
+ }
126
+ }
120
127
  boxGraph.createBox(key, uuid, box => box.read(input));
121
128
  });
122
129
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opendaw/studio-core",
3
- "version": "0.0.54",
3
+ "version": "0.0.55",
4
4
  "license": "LGPL-3.0-or-later",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -30,16 +30,16 @@
30
30
  "test": "vitest run --config vitest.config.ts"
31
31
  },
32
32
  "dependencies": {
33
- "@opendaw/lib-box": "^0.0.45",
34
- "@opendaw/lib-dawproject": "^0.0.31",
35
- "@opendaw/lib-dom": "^0.0.45",
36
- "@opendaw/lib-dsp": "^0.0.45",
37
- "@opendaw/lib-fusion": "^0.0.45",
38
- "@opendaw/lib-runtime": "^0.0.45",
39
- "@opendaw/lib-std": "^0.0.45",
40
- "@opendaw/studio-adapters": "^0.0.46",
41
- "@opendaw/studio-boxes": "^0.0.45",
42
- "@opendaw/studio-enums": "^0.0.36",
33
+ "@opendaw/lib-box": "^0.0.46",
34
+ "@opendaw/lib-dawproject": "^0.0.32",
35
+ "@opendaw/lib-dom": "^0.0.46",
36
+ "@opendaw/lib-dsp": "^0.0.46",
37
+ "@opendaw/lib-fusion": "^0.0.46",
38
+ "@opendaw/lib-runtime": "^0.0.46",
39
+ "@opendaw/lib-std": "^0.0.46",
40
+ "@opendaw/studio-adapters": "^0.0.47",
41
+ "@opendaw/studio-boxes": "^0.0.46",
42
+ "@opendaw/studio-enums": "^0.0.37",
43
43
  "dropbox": "^10.34.0",
44
44
  "y-websocket": "^1.4.5",
45
45
  "yjs": "^13.6.27",
@@ -53,10 +53,10 @@
53
53
  "@ffmpeg/ffmpeg": "^0.12.15",
54
54
  "@ffmpeg/util": "^0.12.2",
55
55
  "@opendaw/eslint-config": "^0.0.20",
56
- "@opendaw/studio-core-processors": "^0.0.46",
57
- "@opendaw/studio-core-workers": "^0.0.41",
58
- "@opendaw/studio-forge-boxes": "^0.0.45",
56
+ "@opendaw/studio-core-processors": "^0.0.47",
57
+ "@opendaw/studio-core-workers": "^0.0.42",
58
+ "@opendaw/studio-forge-boxes": "^0.0.46",
59
59
  "@opendaw/typescript-config": "^0.0.20"
60
60
  },
61
- "gitHead": "24a9fbbd533ed5d9c559cf5f12f786246704bc1d"
61
+ "gitHead": "4136230de6c35fe8db4bde5221010c5e86f7b11a"
62
62
  }