@opendaw/studio-core 0.0.44 → 0.0.46

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.
Files changed (75) hide show
  1. package/dist/AudioOfflineRenderer.d.ts +1 -2
  2. package/dist/AudioOfflineRenderer.d.ts.map +1 -1
  3. package/dist/AudioOfflineRenderer.js +10 -3
  4. package/dist/EffectBox.d.ts +2 -2
  5. package/dist/EffectBox.d.ts.map +1 -1
  6. package/dist/EffectFactories.d.ts +9 -0
  7. package/dist/EffectFactories.d.ts.map +1 -1
  8. package/dist/EffectFactories.js +41 -24
  9. package/dist/EffectFactory.d.ts +1 -1
  10. package/dist/EffectFactory.d.ts.map +1 -1
  11. package/dist/EffectParameterDefaults.d.ts +5 -0
  12. package/dist/EffectParameterDefaults.d.ts.map +1 -0
  13. package/dist/EffectParameterDefaults.js +27 -0
  14. package/dist/Engine.d.ts +1 -1
  15. package/dist/Engine.d.ts.map +1 -1
  16. package/dist/EngineFacade.d.ts +1 -1
  17. package/dist/EngineFacade.d.ts.map +1 -1
  18. package/dist/EngineFacade.js +1 -1
  19. package/dist/EngineWorklet.d.ts +1 -1
  20. package/dist/EngineWorklet.d.ts.map +1 -1
  21. package/dist/EngineWorklet.js +3 -2
  22. package/dist/Preferences.d.ts +20 -0
  23. package/dist/Preferences.d.ts.map +1 -0
  24. package/dist/Preferences.js +46 -0
  25. package/dist/capture/CaptureDevices.d.ts +1 -1
  26. package/dist/capture/CaptureDevices.d.ts.map +1 -1
  27. package/dist/capture/CaptureDevices.js +22 -11
  28. package/dist/capture/CaptureMidi.js +1 -1
  29. package/dist/capture/RecordTrack.d.ts +2 -2
  30. package/dist/capture/RecordTrack.d.ts.map +1 -1
  31. package/dist/capture/Recording.d.ts +1 -1
  32. package/dist/capture/Recording.d.ts.map +1 -1
  33. package/dist/capture/Recording.js +1 -1
  34. package/dist/dawproject/BuiltinDevices.d.ts.map +1 -1
  35. package/dist/dawproject/BuiltinDevices.js +3 -2
  36. package/dist/dawproject/{DawProjectImport.d.ts → DawProjectImporter.d.ts} +1 -1
  37. package/dist/dawproject/DawProjectImporter.d.ts.map +1 -0
  38. package/dist/dawproject/{DawProjectImport.js → DawProjectImporter.js} +17 -5
  39. package/dist/dawproject/DawProjectImporter.test.d.ts +2 -0
  40. package/dist/dawproject/DawProjectImporter.test.d.ts.map +1 -0
  41. package/dist/dawproject/{DawProjectImport.test.js → DawProjectImporter.test.js} +1 -1
  42. package/dist/dawproject/DawProjectService.js +1 -1
  43. package/dist/dawproject/index.d.ts +1 -1
  44. package/dist/dawproject/index.d.ts.map +1 -1
  45. package/dist/dawproject/index.js +1 -1
  46. package/dist/index.d.ts +1 -0
  47. package/dist/index.d.ts.map +1 -1
  48. package/dist/index.js +1 -0
  49. package/dist/midi/MIDILearning.d.ts +1 -1
  50. package/dist/midi/MIDILearning.d.ts.map +1 -1
  51. package/dist/midi/MIDILearning.js +22 -3
  52. package/dist/processors.js +7 -7
  53. package/dist/processors.js.map +4 -4
  54. package/dist/project/Project.d.ts +12 -7
  55. package/dist/project/Project.d.ts.map +1 -1
  56. package/dist/project/Project.js +60 -33
  57. package/dist/project/ProjectMigration.d.ts.map +1 -1
  58. package/dist/project/ProjectMigration.js +10 -1
  59. package/dist/project/Recovery.d.ts +9 -0
  60. package/dist/project/Recovery.d.ts.map +1 -0
  61. package/dist/project/Recovery.js +49 -0
  62. package/dist/project/index.d.ts +1 -0
  63. package/dist/project/index.d.ts.map +1 -1
  64. package/dist/project/index.js +1 -0
  65. package/dist/workers-main.js +2 -2
  66. package/dist/workers-main.js.map +4 -4
  67. package/dist/ysync/YService.d.ts.map +1 -1
  68. package/dist/ysync/YService.js +19 -8
  69. package/dist/ysync/YSync.d.ts +4 -4
  70. package/dist/ysync/YSync.d.ts.map +1 -1
  71. package/dist/ysync/YSync.js +29 -26
  72. package/package.json +49 -49
  73. package/dist/dawproject/DawProjectImport.d.ts.map +0 -1
  74. package/dist/dawproject/DawProjectImport.test.d.ts +0 -2
  75. package/dist/dawproject/DawProjectImport.test.d.ts.map +0 -1
@@ -251,7 +251,7 @@ export var DawProjectImport;
251
251
  }
252
252
  else if (isInstanceOf(timeline, PointsSchema)) {
253
253
  // TODO How to get the actual parameter?
254
- console.debug(timeline.target?.parameter);
254
+ // console.debug(timeline.target?.parameter)
255
255
  }
256
256
  }) ?? []);
257
257
  };
@@ -340,7 +340,13 @@ export var DawProjectImport;
340
340
  .map(readLane) ?? []);
341
341
  };
342
342
  await ifDefined(schema.arrangement, arrangement => readArrangement(arrangement));
343
- outputPointers.forEach(({ target, pointer }) => pointer.refer(asDefined(audioBusses.get(target), `${target} cannot be found.`).input));
343
+ outputPointers.forEach(({ target, pointer }) => {
344
+ const value = audioBusses.get(target);
345
+ // https://github.com/andremichelle/openDAW/issues/25
346
+ if (isDefined(value)) {
347
+ pointer.refer(value.input);
348
+ }
349
+ });
344
350
  rootBox.audioUnits.pointerHub.incoming().forEach(({ box }) => {
345
351
  const audioUnitBox = asInstanceOf(box, AudioUnitBox);
346
352
  if (audioUnitBox.type.getValue() !== AudioUnitType.Output
@@ -369,12 +375,18 @@ export var DawProjectImport;
369
375
  }
370
376
  boxGraph.endTransaction();
371
377
  boxGraph.verifyPointers();
372
- const { audioBusBox: masterBusBox, audioUnitBox: masterAudioUnit } = primaryAudioBusUnitOption.unwrap("Did not find a primary output");
378
+ const { audioBusBox: primaryAudioBus, audioUnitBox: primaryAudioOutputUnit } = primaryAudioBusUnitOption.unwrap("Did not find a primary output");
373
379
  return {
374
380
  audioIds: audioIdSet.values(),
375
381
  skeleton: {
376
382
  boxGraph,
377
- mandatoryBoxes: { rootBox, timelineBox, masterBusBox, masterAudioUnit, userInterfaceBox }
383
+ mandatoryBoxes: {
384
+ rootBox,
385
+ timelineBox,
386
+ primaryAudioBus,
387
+ primaryAudioOutputUnit,
388
+ userInterfaceBoxes: [userInterfaceBox]
389
+ }
378
390
  }
379
391
  };
380
392
  };
@@ -386,7 +398,7 @@ export var DawProjectImport;
386
398
  visitTapeDeviceBox: () => TrackType.Audio,
387
399
  visitNanoDeviceBox: () => TrackType.Notes,
388
400
  visitPlayfieldDeviceBox: () => TrackType.Notes,
389
- visitVaporisateurDeviceBox: () => TrackType.Notes
401
+ visitVaporisateurDeviceBox: () => TrackType.Notes,
390
402
  }) ?? TrackType.Undefined;
391
403
  };
392
404
  })(DawProjectImport || (DawProjectImport = {}));
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=DawProjectImporter.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DawProjectImporter.test.d.ts","sourceRoot":"","sources":["../../src/dawproject/DawProjectImporter.test.ts"],"names":[],"mappings":""}
@@ -3,7 +3,7 @@ import { fileURLToPath } from "url";
3
3
  import * as path from "node:path";
4
4
  import * as fs from "node:fs";
5
5
  import { DawProject } from "./DawProject";
6
- import { DawProjectImport } from "./DawProjectImport";
6
+ import { DawProjectImport } from "./DawProjectImporter";
7
7
  describe("DawProjectImport", () => {
8
8
  it("import", async () => {
9
9
  const __dirname = path.dirname(fileURLToPath(import.meta.url));
@@ -5,7 +5,7 @@ import { Xml } from "@opendaw/lib-xml";
5
5
  import { MetaDataSchema } from "@opendaw/lib-dawproject";
6
6
  import { DawProject } from "./DawProject";
7
7
  import { FilePickerAcceptTypes } from "../FilePickerAcceptTypes";
8
- import { DawProjectImport } from "./DawProjectImport";
8
+ import { DawProjectImport } from "./DawProjectImporter";
9
9
  export class DawProjectService {
10
10
  sampleService;
11
11
  constructor(sampleService) {
@@ -1,5 +1,5 @@
1
1
  export * from "./DawProject";
2
2
  export * from "./DawProjectExporter";
3
- export * from "./DawProjectImport";
3
+ export * from "./DawProjectImporter";
4
4
  export * from "./DawProjectService";
5
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dawproject/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA;AAClC,cAAc,qBAAqB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dawproject/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,sBAAsB,CAAA;AACpC,cAAc,sBAAsB,CAAA;AACpC,cAAc,qBAAqB,CAAA"}
@@ -1,4 +1,4 @@
1
1
  export * from "./DawProject";
2
2
  export * from "./DawProjectExporter";
3
- export * from "./DawProjectImport";
3
+ export * from "./DawProjectImporter";
4
4
  export * from "./DawProjectService";
package/dist/index.d.ts CHANGED
@@ -29,6 +29,7 @@ export * from "./InstrumentProduct";
29
29
  export * from "./MeterWorklet";
30
30
  export * from "./Mixer";
31
31
  export * from "./PeaksWriter";
32
+ export * from "./Preferences";
32
33
  export * from "./RenderQuantum";
33
34
  export * from "./WavFile";
34
35
  export * from "./Workers";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,SAAS,CAAA;AACvB,cAAc,cAAc,CAAA;AAC5B,cAAc,QAAQ,CAAA;AACtB,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,MAAM,CAAA;AACpB,cAAc,SAAS,CAAA;AACvB,cAAc,SAAS,CAAA;AAEvB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,wBAAwB,CAAA;AACtC,cAAc,qBAAqB,CAAA;AACnC,cAAc,cAAc,CAAA;AAC5B,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,mBAAmB,CAAA;AACjC,cAAc,UAAU,CAAA;AACxB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,yBAAyB,CAAA;AACvC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,uBAAuB,CAAA;AACrC,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,SAAS,CAAA;AACvB,cAAc,eAAe,CAAA;AAC7B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,cAAc,iBAAiB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,SAAS,CAAA;AACvB,cAAc,cAAc,CAAA;AAC5B,cAAc,QAAQ,CAAA;AACtB,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,MAAM,CAAA;AACpB,cAAc,SAAS,CAAA;AACvB,cAAc,SAAS,CAAA;AAEvB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,wBAAwB,CAAA;AACtC,cAAc,qBAAqB,CAAA;AACnC,cAAc,cAAc,CAAA;AAC5B,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,mBAAmB,CAAA;AACjC,cAAc,UAAU,CAAA;AACxB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,yBAAyB,CAAA;AACvC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,uBAAuB,CAAA;AACrC,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,SAAS,CAAA;AACvB,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,cAAc,iBAAiB,CAAA"}
package/dist/index.js CHANGED
@@ -29,6 +29,7 @@ export * from "./InstrumentProduct";
29
29
  export * from "./MeterWorklet";
30
30
  export * from "./Mixer";
31
31
  export * from "./PeaksWriter";
32
+ export * from "./Preferences";
32
33
  export * from "./RenderQuantum";
33
34
  export * from "./WavFile";
34
35
  export * from "./Workers";
@@ -1,7 +1,7 @@
1
1
  import { byte, JSONValue, Provider, Terminable } from "@opendaw/lib-std";
2
2
  import { Address, AddressJSON, PrimitiveField, PrimitiveValues } from "@opendaw/lib-box";
3
3
  import { Pointers } from "@opendaw/studio-enums";
4
- import { Project } from "../project/Project";
4
+ import { Project } from "../project";
5
5
  export type MIDIConnectionJSON = ({
6
6
  type: "control";
7
7
  controlId: byte;
@@ -1 +1 @@
1
- {"version":3,"file":"MIDILearning.d.ts","sourceRoot":"","sources":["../../src/midi/MIDILearning.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,IAAI,EAGJ,SAAS,EAET,QAAQ,EAGR,UAAU,EAEb,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAC,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,EAAC,MAAM,kBAAkB,CAAA;AAEtF,OAAO,EAAC,QAAQ,EAAC,MAAM,uBAAuB,CAAA;AAE9C,OAAO,EAAC,OAAO,EAAC,MAAM,oBAAoB,CAAA;AAG1C,MAAM,MAAM,kBAAkB,GAAG,CAAC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,SAAS,EAAE,IAAI,CAAA;CAAE,CAAC,GACjE;IAAE,OAAO,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,IAAI,CAAA;CAAE,GACvC,SAAS,CAAA;AAEf,MAAM,WAAW,cAAe,SAAQ,UAAU;IAC9C,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAA;IACvB,MAAM,IAAI,kBAAkB,CAAA;CAC/B;AAID,qBAAa,YAAa,YAAW,UAAU;;gBAM/B,OAAO,EAAE,OAAO;IAK5B,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO;IAC5C,oBAAoB,CAAC,OAAO,EAAE,OAAO;IAE/B,iBAAiB,CAAC,KAAK,EAAE,cAAc,CAAC,eAAe,EAAE,QAAQ,CAAC,WAAW,GAAG,QAAQ,CAAC;IAsB/F,MAAM,IAAI,aAAa,CAAC,kBAAkB,CAAC;IAI3C,SAAS,IAAI,IAAI;CAgDpB"}
1
+ {"version":3,"file":"MIDILearning.d.ts","sourceRoot":"","sources":["../../src/midi/MIDILearning.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,IAAI,EAIJ,SAAS,EAGT,QAAQ,EAGR,UAAU,EAEb,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAC,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,EAAC,MAAM,kBAAkB,CAAA;AAEtF,OAAO,EAAC,QAAQ,EAAC,MAAM,uBAAuB,CAAA;AAE9C,OAAO,EAAC,OAAO,EAAC,MAAM,YAAY,CAAA;AAIlC,MAAM,MAAM,kBAAkB,GAAG,CAAC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,SAAS,EAAE,IAAI,CAAA;CAAE,CAAC,GACjE;IAAE,OAAO,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,IAAI,CAAA;CAAE,GACvC,SAAS,CAAA;AAEf,MAAM,WAAW,cAAe,SAAQ,UAAU;IAC9C,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAA;IACvB,MAAM,IAAI,kBAAkB,CAAA;CAC/B;AAID,qBAAa,YAAa,YAAW,UAAU;;gBAM/B,OAAO,EAAE,OAAO;IAK5B,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO;IAC5C,oBAAoB,CAAC,OAAO,EAAE,OAAO;IAE/B,iBAAiB,CAAC,KAAK,EAAE,cAAc,CAAC,eAAe,EAAE,QAAQ,CAAC,WAAW,GAAG,QAAQ,CAAC;IAsB/F,MAAM,IAAI,aAAa,CAAC,kBAAkB,CAAC;IAI3C,SAAS,IAAI,IAAI;CAiEpB"}
@@ -1,7 +1,8 @@
1
- import { Errors, isDefined, RuntimeNotifier, Terminator } from "@opendaw/lib-std";
1
+ import { Errors, isDefined, isNotNull, RuntimeNotifier, Terminator } from "@opendaw/lib-std";
2
2
  import { Address } from "@opendaw/lib-box";
3
3
  import { MidiData } from "@opendaw/lib-midi";
4
4
  import { MidiDevices } from "./MidiDevices";
5
+ import { AnimationFrame } from "@opendaw/lib-dom";
5
6
  export class MIDILearning {
6
7
  #terminator = new Terminator();
7
8
  #project;
@@ -72,6 +73,8 @@ export class MIDILearning {
72
73
  }
73
74
  #createMidiControlObserver(project, adapter, controlId) {
74
75
  const registration = adapter.registerMidiControl();
76
+ let pendingValue = null;
77
+ const update = (value) => project.editing.modify(() => adapter.setValue(adapter.valueMapping.y(value)), false);
75
78
  return {
76
79
  observer: (event) => {
77
80
  const data = event.data;
@@ -79,10 +82,26 @@ export class MIDILearning {
79
82
  return;
80
83
  }
81
84
  if (MidiData.isController(data) && MidiData.readParam1(data) === controlId) {
82
- project.editing.modify(() => adapter.setValue(adapter.valueMapping.y(MidiData.asValue(data))), false);
85
+ const value = MidiData.asValue(data);
86
+ if (pendingValue === null) {
87
+ update(value);
88
+ pendingValue = value;
89
+ AnimationFrame.once(() => {
90
+ if (isNotNull(pendingValue)) {
91
+ update(pendingValue);
92
+ pendingValue = null;
93
+ }
94
+ });
95
+ }
96
+ else {
97
+ pendingValue = value;
98
+ }
83
99
  }
84
100
  },
85
- terminate: () => registration.terminate()
101
+ terminate: () => {
102
+ pendingValue = null;
103
+ registration.terminate();
104
+ }
86
105
  };
87
106
  }
88
107
  }