@opendaw/studio-adapters 0.3.1 → 0.3.3

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 (51) hide show
  1. package/LICENSE +661 -0
  2. package/dist/AutomatableParameterFieldAdapter.d.ts +9 -5
  3. package/dist/AutomatableParameterFieldAdapter.d.ts.map +1 -1
  4. package/dist/AutomatableParameterFieldAdapter.js +61 -40
  5. package/dist/BoxAdapters.d.ts.map +1 -1
  6. package/dist/BoxAdapters.js +12 -0
  7. package/dist/DeviceManualUrls.d.ts +1 -0
  8. package/dist/DeviceManualUrls.d.ts.map +1 -1
  9. package/dist/DeviceManualUrls.js +1 -0
  10. package/dist/ParameterFieldAdapters.d.ts +3 -7
  11. package/dist/ParameterFieldAdapters.d.ts.map +1 -1
  12. package/dist/ParameterFieldAdapters.js +2 -15
  13. package/dist/ParameterOwner.d.ts.map +1 -1
  14. package/dist/ParameterOwner.js +4 -0
  15. package/dist/RecordingProcessorOptions.d.ts +4 -0
  16. package/dist/RecordingProcessorOptions.d.ts.map +1 -1
  17. package/dist/RecordingProcessorOptions.js +1 -1
  18. package/dist/RootBoxAdapter.d.ts +2 -0
  19. package/dist/RootBoxAdapter.d.ts.map +1 -1
  20. package/dist/RootBoxAdapter.js +8 -2
  21. package/dist/audio-unit/AudioUnitTracks.d.ts +2 -15
  22. package/dist/audio-unit/AudioUnitTracks.d.ts.map +1 -1
  23. package/dist/audio-unit/AudioUnitTracks.js +5 -59
  24. package/dist/devices/audio-effects/ConvolverDeviceBoxAdapter.d.ts +35 -0
  25. package/dist/devices/audio-effects/ConvolverDeviceBoxAdapter.d.ts.map +1 -0
  26. package/dist/devices/audio-effects/ConvolverDeviceBoxAdapter.js +60 -0
  27. package/dist/index.d.ts +10 -0
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +10 -0
  30. package/dist/modulation/Modulators.d.ts.map +1 -1
  31. package/dist/modulation/Modulators.js +11 -2
  32. package/dist/modulation/RandomModulatorBoxAdapter.d.ts +0 -2
  33. package/dist/modulation/RandomModulatorBoxAdapter.d.ts.map +1 -1
  34. package/dist/modulation/RandomModulatorBoxAdapter.js +4 -6
  35. package/dist/modulation/StepsModulatorBoxAdapter.d.ts +0 -2
  36. package/dist/modulation/StepsModulatorBoxAdapter.d.ts.map +1 -1
  37. package/dist/modulation/StepsModulatorBoxAdapter.js +2 -3
  38. package/dist/preset/PresetDecoder.d.ts.map +1 -1
  39. package/dist/preset/PresetDecoder.js +27 -31
  40. package/dist/preset/PresetEncoder.d.ts.map +1 -1
  41. package/dist/preset/PresetEncoder.js +8 -5
  42. package/dist/protocols.d.ts +4 -1
  43. package/dist/protocols.d.ts.map +1 -1
  44. package/dist/timeline/TrackBoxAdapter.d.ts +1 -0
  45. package/dist/timeline/TrackBoxAdapter.d.ts.map +1 -1
  46. package/dist/timeline/TrackBoxAdapter.js +21 -27
  47. package/dist/transfer/TransferAudioUnits.js +2 -2
  48. package/dist/transfer/TransferUtils.d.ts +5 -2
  49. package/dist/transfer/TransferUtils.d.ts.map +1 -1
  50. package/dist/transfer/TransferUtils.js +41 -5
  51. package/package.json +11 -11
@@ -12,7 +12,7 @@ export interface EngineCommands extends Terminable {
12
12
  stop(reset: boolean): void;
13
13
  setPosition(position: ppqn): void;
14
14
  /** @internal */
15
- prepareRecordingState(countIn: boolean): void;
15
+ prepareRecordingState(countIn: boolean, generation: int): void;
16
16
  /** @internal */
17
17
  stopRecording(): void;
18
18
  queryLoadingComplete(): Promise<boolean>;
@@ -20,6 +20,8 @@ export interface EngineCommands extends Terminable {
20
20
  noteSignal(signal: NoteSignal): void;
21
21
  /** @internal */
22
22
  ignoreNoteRegion(uuid: UUID.Bytes): void;
23
+ /** @internal */
24
+ suspendAutomation(uuid: UUID.Bytes): void;
23
25
  scheduleClipPlay(clipIds: ReadonlyArray<UUID.Bytes>): void;
24
26
  scheduleClipStop(trackIds: ReadonlyArray<UUID.Bytes>): void;
25
27
  /** @internal */
@@ -38,6 +40,7 @@ export interface EngineToClient {
38
40
  fetchNamWasm(): Promise<ArrayBuffer>;
39
41
  notifyClipSequenceChanges(changes: ClipSequencingUpdates): void;
40
42
  switchMarkerState(state: Nullable<[UUID.Bytes, int]>): void;
43
+ recordingStarted(contextTime: number, position: ppqn, generation: int): void;
41
44
  ready(): void;
42
45
  }
43
46
  //# sourceMappingURL=protocols.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"protocols.d.ts","sourceRoot":"","sources":["../src/protocols.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAChE,OAAO,EAAC,SAAS,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAC,qBAAqB,EAAC,MAAM,qBAAqB,CAAA;AACzD,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,YAAY,CAAA;AAE1C,MAAM,MAAM,kBAAkB,GAAG;IAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC;IAAC,QAAQ,EAAE,aAAa,CAAC,GAAG,CAAC,CAAA;CAAE,CAAA;AAEnF,MAAM,WAAW,cAAe,SAAQ,UAAU;IAC9C,IAAI,IAAI,IAAI,CAAA;IACZ,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAA;IAC1B,WAAW,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAA;IACjC,gBAAgB;IAChB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;IAC7C,gBAAgB;IAChB,aAAa,IAAI,IAAI,CAAA;IACrB,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC,CAAA;IAExC,KAAK,IAAI,IAAI,CAAA;IACb,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAAA;IACpC,gBAAgB;IAChB,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,gBAAgB;IAChB,SAAS,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAAA;IAC7D,cAAc,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI,CAAA;IACnD,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,IAAI,CAAA;IACtE,gBAAgB;IAChB,mBAAmB,CAAC,GAAG,EAAE,aAAa,CAAC,kBAAkB,CAAC,GAAG,IAAI,CAAA;CACpE;AAED,MAAM,WAAW,cAAc;IAC3B,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,KAAK,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAAA;IAC5B,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IAClD,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,CAAA;IAChD,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;IACrD,YAAY,IAAI,OAAO,CAAC,WAAW,CAAC,CAAA;IACpC,yBAAyB,CAAC,OAAO,EAAE,qBAAqB,GAAG,IAAI,CAAA;IAC/D,iBAAiB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAA;IAC3D,KAAK,IAAI,IAAI,CAAA;CAChB"}
1
+ {"version":3,"file":"protocols.d.ts","sourceRoot":"","sources":["../src/protocols.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAChE,OAAO,EAAC,SAAS,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAC,qBAAqB,EAAC,MAAM,qBAAqB,CAAA;AACzD,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,YAAY,CAAA;AAE1C,MAAM,MAAM,kBAAkB,GAAG;IAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC;IAAC,QAAQ,EAAE,aAAa,CAAC,GAAG,CAAC,CAAA;CAAE,CAAA;AAEnF,MAAM,WAAW,cAAe,SAAQ,UAAU;IAC9C,IAAI,IAAI,IAAI,CAAA;IACZ,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAA;IAC1B,WAAW,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAA;IACjC,gBAAgB;IAChB,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,GAAG,IAAI,CAAA;IAC9D,gBAAgB;IAChB,aAAa,IAAI,IAAI,CAAA;IACrB,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC,CAAA;IAExC,KAAK,IAAI,IAAI,CAAA;IACb,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAAA;IACpC,gBAAgB;IAChB,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;IACxC,gBAAgB;IAChB,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;IACzC,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,gBAAgB;IAChB,SAAS,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAAA;IAC7D,cAAc,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI,CAAA;IACnD,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,IAAI,CAAA;IACtE,gBAAgB;IAChB,mBAAmB,CAAC,GAAG,EAAE,aAAa,CAAC,kBAAkB,CAAC,GAAG,IAAI,CAAA;CACpE;AAED,MAAM,WAAW,cAAc;IAC3B,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,KAAK,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAAA;IAC5B,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IAClD,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,CAAA;IAChD,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;IACrD,YAAY,IAAI,OAAO,CAAC,WAAW,CAAC,CAAA;IACpC,yBAAyB,CAAC,OAAO,EAAE,qBAAqB,GAAG,IAAI,CAAA;IAC/D,iBAAiB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAA;IAC3D,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,GAAG,IAAI,CAAA;IAC5E,KAAK,IAAI,IAAI,CAAA;CAChB"}
@@ -18,6 +18,7 @@ export declare class TrackBoxAdapter implements BoxAdapter {
18
18
  get targetName(): Option<string>;
19
19
  terminate(): void;
20
20
  get audioUnit(): AudioUnitBox;
21
+ get optAudioUnit(): Option<AudioUnitBox>;
21
22
  get target(): PointerField<Pointers.Automation>;
22
23
  get clips(): TrackClips;
23
24
  get regions(): TrackRegions;
@@ -1 +1 @@
1
- {"version":3,"file":"TrackBoxAdapter.d.ts","sourceRoot":"","sources":["../../src/timeline/TrackBoxAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,GAAG,EAEH,QAAQ,EACR,MAAM,EAEN,YAAY,EAGZ,SAAS,EACT,IAAI,EACP,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAC,OAAO,EAAE,YAAY,EAAO,UAAU,EAAE,YAAY,EAAc,MAAM,kBAAkB,CAAA;AAClG,OAAO,EAAC,IAAI,EAAkB,MAAM,kBAAkB,CAAA;AACtD,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAA;AACxC,OAAO,EAAC,kBAAkB,EAAC,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAA;AACvC,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAA;AAE3C,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAA;AACrC,OAAO,EAAC,iBAAiB,EAAE,mBAAmB,EAAC,MAAM,sBAAsB,CAAA;AAG3E,OAAO,EAAC,YAAY,EAAE,QAAQ,EAAC,MAAM,uBAAuB,CAAA;AAC5D,OAAO,EAAC,QAAQ,EAAC,MAAM,uBAAuB,CAAA;AAE9C,qBAAa,eAAgB,YAAW,UAAU;;gBAWlC,OAAO,EAAE,kBAAkB,EAAE,GAAG,EAAE,QAAQ;IAUtD,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,YAAY;IAuBnF,IAAI,OAAO,IAAI,kBAAkB,CAAuB;IAExD,IAAI,UAAU,CAAC,KAAK,EAAE,MAAM,EAoB3B;IAED,IAAI,UAAU,IAAI,MAAM,CAAC,MAAM,CAAC,CAwB/B;IAgCD,SAAS;IAET,IAAI,SAAS,IAAI,YAAY,CAE5B;IAED,IAAI,MAAM,IAAI,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,CAA0B;IAEzE,IAAI,KAAK,IAAI,UAAU,CAAqB;IAC5C,IAAI,OAAO,IAAI,YAAY,CAAuB;IAClD,IAAI,OAAO,IAAI,YAAY,CAA2B;IACtD,IAAI,UAAU,IAAI,UAAU,CAAyB;IACrD,IAAI,IAAI,IAAI,SAAS,CAAmC;IACxD,IAAI,GAAG,IAAI,QAAQ,CAAmB;IACtC,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAgC;IACtD,IAAI,OAAO,IAAI,OAAO,CAA2B;IACjD,IAAI,SAAS,IAAI,GAAG,CAAoC;IACxD,IAAI,SAAS,CAAC,KAAK,EAAE,GAAG,EAAmC;IAE3D,OAAO,CAAC,OAAO,EAAE,iBAAiB,GAAG,mBAAmB,GAAG,OAAO;IAgBlE,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,GAAG,SAAS;IAiCvD,IAAI,iBAAiB,IAAI,MAAM,CAAC,MAAM,CAAC,CAWtC;CAsCJ"}
1
+ {"version":3,"file":"TrackBoxAdapter.d.ts","sourceRoot":"","sources":["../../src/timeline/TrackBoxAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,GAAG,EAEH,QAAQ,EACR,MAAM,EAEN,YAAY,EAGZ,SAAS,EACT,IAAI,EACP,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAC,OAAO,EAAE,YAAY,EAAO,UAAU,EAAE,YAAY,EAAc,MAAM,kBAAkB,CAAA;AAClG,OAAO,EAAC,IAAI,EAAkB,MAAM,kBAAkB,CAAA;AACtD,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAA;AACxC,OAAO,EAAC,kBAAkB,EAAC,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAA;AACvC,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAA;AAI3C,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAA;AACrC,OAAO,EAAC,iBAAiB,EAAE,mBAAmB,EAAC,MAAM,sBAAsB,CAAA;AAG3E,OAAO,EAAC,YAAY,EAAiB,QAAQ,EAAC,MAAM,uBAAuB,CAAA;AAC3E,OAAO,EAAC,QAAQ,EAAC,MAAM,uBAAuB,CAAA;AAE9C,qBAAa,eAAgB,YAAW,UAAU;;gBAWlC,OAAO,EAAE,kBAAkB,EAAE,GAAG,EAAE,QAAQ;IAUtD,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,YAAY;IAuBnF,IAAI,OAAO,IAAI,kBAAkB,CAAuB;IAExD,IAAI,UAAU,CAAC,KAAK,EAAE,MAAM,EAoB3B;IAED,IAAI,UAAU,IAAI,MAAM,CAAC,MAAM,CAAC,CAE/B;IA0CD,SAAS;IAET,IAAI,SAAS,IAAI,YAAY,CAE5B;IAED,IAAI,YAAY,IAAI,MAAM,CAAC,YAAY,CAAC,CAGvC;IAED,IAAI,MAAM,IAAI,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,CAA0B;IACzE,IAAI,KAAK,IAAI,UAAU,CAAqB;IAC5C,IAAI,OAAO,IAAI,YAAY,CAAuB;IAClD,IAAI,OAAO,IAAI,YAAY,CAA2B;IACtD,IAAI,UAAU,IAAI,UAAU,CAAyB;IACrD,IAAI,IAAI,IAAI,SAAS,CAAmC;IACxD,IAAI,GAAG,IAAI,QAAQ,CAAmB;IACtC,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAgC;IACtD,IAAI,OAAO,IAAI,OAAO,CAA2B;IACjD,IAAI,SAAS,IAAI,GAAG,CAAoC;IACxD,IAAI,SAAS,CAAC,KAAK,EAAE,GAAG,EAAmC;IAE3D,OAAO,CAAC,OAAO,EAAE,iBAAiB,GAAG,mBAAmB,GAAG,OAAO;IAgBlE,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,GAAG,SAAS;IAiCvD,IAAI,iBAAiB,IAAI,MAAM,CAAC,MAAM,CAAC,CAWtC;CAsCJ"}
@@ -10,16 +10,18 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
10
10
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
11
11
  };
12
12
  var _TrackBoxAdapter_instances, _TrackBoxAdapter_context, _TrackBoxAdapter_box, _TrackBoxAdapter_terminator, _TrackBoxAdapter_clips, _TrackBoxAdapter_regions, _TrackBoxAdapter_listIndex, _TrackBoxAdapter_catchupAndSubscribeTargetName, _TrackBoxAdapter_catchupAndSubscribeTargetControlName, _TrackBoxAdapter_resolveOwnerDeviceBox;
13
- import { asInstanceOf, DefaultObservableValue, isInstanceOf, Option, panic, Terminable, Terminator } from "@opendaw/lib-std";
13
+ import { DefaultObservableValue, isInstanceOf, Option, panic, Terminable, Terminator } from "@opendaw/lib-std";
14
14
  import { StringField } from "@opendaw/lib-box";
15
15
  import { UpdateClockRate } from "@opendaw/lib-dsp";
16
16
  import { TrackClips } from "./TrackClips";
17
17
  import { TrackRegions } from "./TrackRegions";
18
18
  import { AudioUnitBoxAdapter } from "../audio-unit/AudioUnitBoxAdapter";
19
+ import { ParameterOwner } from "../ParameterOwner";
20
+ import { isModulatorBoxAdapter } from "../modulation/ModulatorBoxAdapter";
19
21
  import { TrackType } from "./TrackType";
20
22
  import { ValueClipBoxAdapter } from "./clip/ValueClipBoxAdapter";
21
23
  import { ValueRegionBoxAdapter } from "./region/ValueRegionBoxAdapter";
22
- import { AudioUnitBox } from "@opendaw/studio-boxes";
24
+ import { AudioUnitBox, ModulationBox } from "@opendaw/studio-boxes";
23
25
  import { Pointers } from "@opendaw/studio-enums";
24
26
  export class TrackBoxAdapter {
25
27
  constructor(context, box) {
@@ -84,33 +86,15 @@ export class TrackBoxAdapter {
84
86
  });
85
87
  }
86
88
  get targetName() {
87
- return __classPrivateFieldGet(this, _TrackBoxAdapter_box, "f").target.targetVertex.flatMap(targetVertex => {
88
- const box = targetVertex.box;
89
- if (box instanceof AudioUnitBox) {
90
- const adapter = __classPrivateFieldGet(this, _TrackBoxAdapter_context, "f").boxAdapters.adapterFor(box, AudioUnitBoxAdapter);
91
- return adapter.input.label;
92
- }
93
- const optAdapter = __classPrivateFieldGet(this, _TrackBoxAdapter_context, "f").boxAdapters.optAdapter(box);
94
- if (optAdapter.nonEmpty()) {
95
- const adapter = optAdapter.unwrap();
96
- if ("labelField" in adapter && adapter.labelField instanceof StringField) {
97
- return Option.wrap(adapter.labelField.getValue());
98
- }
99
- }
100
- const ownerAdapter = __classPrivateFieldGet(this, _TrackBoxAdapter_instances, "m", _TrackBoxAdapter_resolveOwnerDeviceBox).call(this, box)
101
- .flatMap(owner => __classPrivateFieldGet(this, _TrackBoxAdapter_context, "f").boxAdapters.optAdapter(owner));
102
- if (ownerAdapter.nonEmpty()) {
103
- const adapter = ownerAdapter.unwrap();
104
- if ("labelField" in adapter && adapter.labelField instanceof StringField) {
105
- return Option.wrap(adapter.labelField.getValue());
106
- }
107
- }
108
- return Option.wrap(box.name);
109
- });
89
+ return __classPrivateFieldGet(this, _TrackBoxAdapter_box, "f").target.targetVertex.flatMap(vertex => ParameterOwner.nameOf(__classPrivateFieldGet(this, _TrackBoxAdapter_context, "f"), vertex));
110
90
  }
111
91
  terminate() { __classPrivateFieldGet(this, _TrackBoxAdapter_terminator, "f").terminate(); }
112
92
  get audioUnit() {
113
- return asInstanceOf(__classPrivateFieldGet(this, _TrackBoxAdapter_box, "f").tracks.targetVertex.unwrap("track has no audioUnit").box, AudioUnitBox);
93
+ return this.optAudioUnit.unwrap("track has no audioUnit");
94
+ }
95
+ get optAudioUnit() {
96
+ return __classPrivateFieldGet(this, _TrackBoxAdapter_box, "f").tracks.targetVertex
97
+ .flatMap(vertex => vertex.box instanceof AudioUnitBox ? Option.wrap(vertex.box) : Option.None);
114
98
  }
115
99
  get target() { return __classPrivateFieldGet(this, _TrackBoxAdapter_box, "f").target; }
116
100
  get clips() { return __classPrivateFieldGet(this, _TrackBoxAdapter_clips, "f"); }
@@ -195,7 +179,17 @@ _TrackBoxAdapter_context = new WeakMap(), _TrackBoxAdapter_box = new WeakMap(),
195
179
  const targetVertex = __classPrivateFieldGet(this, _TrackBoxAdapter_box, "f").target.targetVertex;
196
180
  if (targetVertex.nonEmpty()) {
197
181
  const box = targetVertex.unwrap().box;
198
- if (box instanceof AudioUnitBox) {
182
+ if (isInstanceOf(box, ModulationBox)) {
183
+ const vertex = targetVertex.unwrap();
184
+ const update = () => observer(ParameterOwner.nameOf(__classPrivateFieldGet(this, _TrackBoxAdapter_context, "f"), vertex));
185
+ update();
186
+ return box.source.targetVertex
187
+ .flatMap(source => __classPrivateFieldGet(this, _TrackBoxAdapter_context, "f").boxAdapters.optAdapter(source.box))
188
+ .mapOr(adapter => isModulatorBoxAdapter(adapter)
189
+ ? adapter.labelField.subscribe(update)
190
+ : Terminable.Empty, Terminable.Empty);
191
+ }
192
+ if (isInstanceOf(box, AudioUnitBox)) {
199
193
  const adapter = __classPrivateFieldGet(this, _TrackBoxAdapter_context, "f").boxAdapters.adapterFor(box, AudioUnitBoxAdapter);
200
194
  return adapter.input.catchupAndSubscribeLabelChange(option => observer(option));
201
195
  }
@@ -19,11 +19,11 @@ export var TransferAudioUnits;
19
19
  }
20
20
  const excludeBox = (box) => TransferUtils.shouldExclude(box)
21
21
  || (options?.excludeTimeline === true && TransferUtils.excludeTimelinePredicate(box));
22
- const dependencies = Array.from(sources[0].graph.dependenciesOf(sources, {
22
+ const dependencies = TransferUtils.withModulators(Array.from(sources[0].graph.dependenciesOf(sources, {
23
23
  alwaysFollowMandatory: true,
24
24
  stopAtResources: true,
25
25
  excludeBox
26
- }).boxes);
26
+ }).boxes));
27
27
  const uuidMap = TransferUtils.generateMap(sources, dependencies, rootBox.audioUnits.address.uuid, primaryAudioBusBox.address.uuid);
28
28
  TransferUtils.copyBoxes(uuidMap, targetBoxGraph, sources, dependencies);
29
29
  TransferUtils.reorderAudioUnits(uuidMap, sources, rootBox, options.insertIndex);
@@ -1,7 +1,7 @@
1
1
  import { ppqn } from "@opendaw/lib-dsp";
2
- import { int, SortedSet, UUID } from "@opendaw/lib-std";
2
+ import { int, Option, SortedSet, UUID } from "@opendaw/lib-std";
3
3
  import { AudioUnitBox, RootBox } from "@opendaw/studio-boxes";
4
- import { Box, BoxGraph } from "@opendaw/lib-box";
4
+ import { Address, Box, BoxGraph, PointerField } from "@opendaw/lib-box";
5
5
  import { ProjectSkeleton } from "../project/ProjectSkeleton";
6
6
  import { AnyRegionBox } from "../unions";
7
7
  export declare namespace TransferUtils {
@@ -11,6 +11,9 @@ export declare namespace TransferUtils {
11
11
  };
12
12
  const excludeTimelinePredicate: (box: Box) => boolean;
13
13
  const shouldExclude: (box: Box) => boolean;
14
+ const keepsIdentity: (box: Box) => boolean;
15
+ const withModulators: (boxes: ReadonlyArray<Box>) => ReadonlyArray<Box>;
16
+ const mapModulatorCollection: (pointer: PointerField, targetGraph: BoxGraph) => Option<Address>;
14
17
  const generateMap: (audioUnitBoxes: ReadonlyArray<AudioUnitBox>, dependencies: ReadonlyArray<Box>, rootBoxUUID: UUID.Bytes, masterBusBoxUUID: UUID.Bytes) => SortedSet<UUID.Bytes, UUIDMapper>;
15
18
  const copyBoxes: (uuidMap: SortedSet<UUID.Bytes, UUIDMapper>, targetBoxGraph: BoxGraph, audioUnitBoxes: ReadonlyArray<AudioUnitBox>, dependencies: ReadonlyArray<Box>) => void;
16
19
  const reorderAudioUnits: (uuidMap: SortedSet<UUID.Bytes, UUIDMapper>, audioUnitBoxes: ReadonlyArray<AudioUnitBox>, rootBox: RootBox, insertIndex?: int) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"TransferUtils.d.ts","sourceRoot":"","sources":["../../src/transfer/TransferUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,kBAAkB,CAAA;AACrC,OAAO,EAMH,GAAG,EAMH,SAAS,EACT,IAAI,EACP,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAC,YAAY,EAAiC,OAAO,EAAW,MAAM,uBAAuB,CAAA;AACpG,OAAO,EAAU,GAAG,EAAE,QAAQ,EAA2B,MAAM,kBAAkB,CAAA;AACjF,OAAO,EAAC,eAAe,EAAC,MAAM,4BAA4B,CAAA;AAC1D,OAAO,EAAC,YAAY,EAAgB,MAAM,WAAW,CAAA;AAGrD,yBAAiB,aAAa,CAAC;IAC3B,KAAY,UAAU,GAAG;QAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC;QAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAA;KAAE,CAAA;IAI5D,MAAM,wBAAwB,GAAI,KAAK,GAAG,KAAG,OACqB,CAAA;IAClE,MAAM,aAAa,GAAI,KAAK,GAAG,KAAG,OAA6D,CAAA;IAE/F,MAAM,WAAW,GAAI,gBAAgB,aAAa,CAAC,YAAY,CAAC,EAC3C,cAAc,aAAa,CAAC,GAAG,CAAC,EAChC,aAAa,IAAI,CAAC,KAAK,EACvB,kBAAkB,IAAI,CAAC,KAAK,KAAG,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CA0B1F,CAAA;IAEM,MAAM,SAAS,GAAI,SAAS,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,EAC1C,gBAAgB,QAAQ,EACxB,gBAAgB,aAAa,CAAC,YAAY,CAAC,EAC3C,cAAc,aAAa,CAAC,GAAG,CAAC,KAAG,IAmC5D,CAAA;IAEM,MAAM,iBAAiB,GAAI,SAAS,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,EAC1C,gBAAgB,aAAa,CAAC,YAAY,CAAC,EAC3C,SAAS,OAAO,EAChB,cAAc,GAAG,KAAG,IA2BrD,CAAA;IAEM,MAAM,cAAc,GAAI,aAAa,aAAa,CAAC,YAAY,CAAC,EACxC,+DAA2D,eAAe,EAC1E,iBAAgB,IAAU,KAAG,IA8C3D,CAAA;CACJ"}
1
+ {"version":3,"file":"TransferUtils.d.ts","sourceRoot":"","sources":["../../src/transfer/TransferUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,kBAAkB,CAAA;AACrC,OAAO,EAMH,GAAG,EAGH,MAAM,EAGN,SAAS,EACT,IAAI,EACP,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAC,YAAY,EAAgD,OAAO,EAAW,MAAM,uBAAuB,CAAA;AAEnH,OAAO,EAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAc,YAAY,EAAC,MAAM,kBAAkB,CAAA;AACjF,OAAO,EAAC,eAAe,EAAC,MAAM,4BAA4B,CAAA;AAC1D,OAAO,EAAC,YAAY,EAAgB,MAAM,WAAW,CAAA;AAIrD,yBAAiB,aAAa,CAAC;IAC3B,KAAY,UAAU,GAAG;QAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC;QAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAA;KAAE,CAAA;IAI5D,MAAM,wBAAwB,GAAI,KAAK,GAAG,KAAG,OACqB,CAAA;IAClE,MAAM,aAAa,GAAI,KAAK,GAAG,KAAG,OAA6D,CAAA;IAC/F,MAAM,aAAa,GAAI,KAAK,GAAG,KAAG,OAA8D,CAAA;IAGhG,MAAM,cAAc,GAAI,OAAO,aAAa,CAAC,GAAG,CAAC,KAAG,aAAa,CAAC,GAAG,CAa3E,CAAA;IAEM,MAAM,sBAAsB,GAAI,SAAS,YAAY,EAAE,aAAa,QAAQ,KAAG,MAAM,CAAC,OAAO,CAI/E,CAAA;IAEd,MAAM,WAAW,GAAI,gBAAgB,aAAa,CAAC,YAAY,CAAC,EAC3C,cAAc,aAAa,CAAC,GAAG,CAAC,EAChC,aAAa,IAAI,CAAC,KAAK,EACvB,kBAAkB,IAAI,CAAC,KAAK,KAAG,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CA0B1F,CAAA;IAEM,MAAM,SAAS,GAAI,SAAS,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,EAC1C,gBAAgB,QAAQ,EACxB,gBAAgB,aAAa,CAAC,YAAY,CAAC,EAC3C,cAAc,aAAa,CAAC,GAAG,CAAC,KAAG,IAqC5D,CAAA;IAEM,MAAM,iBAAiB,GAAI,SAAS,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,EAC1C,gBAAgB,aAAa,CAAC,YAAY,CAAC,EAC3C,SAAS,OAAO,EAChB,cAAc,GAAG,KAAG,IA2BrD,CAAA;IAEM,MAAM,cAAc,GAAI,aAAa,aAAa,CAAC,YAAY,CAAC,EACxC,+DAA2D,eAAe,EAC1E,iBAAgB,IAAU,KAAG,IA8C3D,CAAA;CACJ"}
@@ -1,14 +1,40 @@
1
1
  import { Arrays, asInstanceOf, assert, ByteArrayInput, clamp, isDefined, isInstanceOf, Option, SetMultimap, UUID } from "@opendaw/lib-std";
2
- import { AudioUnitBox, AuxSendBox, TrackBox } from "@opendaw/studio-boxes";
2
+ import { AudioUnitBox, AuxSendBox, ModulationBox, RootBox, TrackBox } from "@opendaw/studio-boxes";
3
+ import { Pointers } from "@opendaw/studio-enums";
3
4
  import { IndexedBox, PointerField } from "@opendaw/lib-box";
4
5
  import { UnionBoxTypes } from "../unions";
5
6
  import { AudioUnitOrdering } from "../factories/AudioUnitOrdering";
7
+ import { isModulatorBox } from "../modulation/ModulatorBoxAdapter";
6
8
  export var TransferUtils;
7
9
  (function (TransferUtils) {
8
10
  const isSameGraph = ({ graph: a }, { graph: b }) => a === b;
9
11
  const compareIndex = (a, b) => a.index.getValue() - b.index.getValue();
10
12
  TransferUtils.excludeTimelinePredicate = (box) => box.accept({ visitTrackBox: () => true }) === true;
11
13
  TransferUtils.shouldExclude = (box) => box.ephemeral || box.name === AuxSendBox.ClassName;
14
+ TransferUtils.keepsIdentity = (box) => box.resource === "preserved" || isModulatorBox(box);
15
+ // modulators live in rootBox.modulators, outside every unit; carried alone, never walked (their other assignments)
16
+ TransferUtils.withModulators = (boxes) => {
17
+ const known = UUID.newSet(box => box.address.uuid);
18
+ boxes.forEach(box => known.add(box));
19
+ const modulators = [];
20
+ boxes.forEach(box => {
21
+ if (!isInstanceOf(box, ModulationBox)) {
22
+ return;
23
+ }
24
+ box.source.targetVertex.ifSome(({ box: modulator }) => {
25
+ if (known.hasKey(modulator.address.uuid)) {
26
+ return;
27
+ }
28
+ known.add(modulator);
29
+ modulators.push(modulator);
30
+ });
31
+ });
32
+ return [...boxes, ...modulators];
33
+ };
34
+ TransferUtils.mapModulatorCollection = (pointer, targetGraph) => pointer.pointerType === Pointers.ModulatorCollection
35
+ ? Option.wrap(targetGraph.boxes().find(box => isInstanceOf(box, RootBox)))
36
+ .map(rootBox => rootBox.modulators.address)
37
+ : Option.None;
12
38
  TransferUtils.generateMap = (audioUnitBoxes, dependencies, rootBoxUUID, masterBusBoxUUID) => {
13
39
  const uuidMap = UUID.newSet(({ source }) => source);
14
40
  uuidMap.addMany([
@@ -31,17 +57,24 @@ export var TransferUtils;
31
57
  ...dependencies
32
58
  .map(box => ({
33
59
  source: box.address.uuid,
34
- target: box.resource === "preserved" ? box.address.uuid : UUID.generate()
60
+ target: TransferUtils.keepsIdentity(box) ? box.address.uuid : UUID.generate()
35
61
  }))
36
62
  ]);
37
63
  return uuidMap;
38
64
  };
39
65
  TransferUtils.copyBoxes = (uuidMap, targetBoxGraph, audioUnitBoxes, dependencies) => {
40
66
  const existingPreservedUuids = UUID.newSet(uuid => uuid);
67
+ const existingModulatorUuids = UUID.newSet(uuid => uuid);
41
68
  dependencies.forEach((source) => {
42
- if (source.resource === "preserved" && targetBoxGraph.findBox(source.address.uuid).nonEmpty()) {
69
+ if (targetBoxGraph.findBox(source.address.uuid).isEmpty()) {
70
+ return;
71
+ }
72
+ if (source.resource === "preserved") {
43
73
  existingPreservedUuids.add(source.address.uuid);
44
74
  }
75
+ if (isModulatorBox(source)) {
76
+ existingModulatorUuids.add(source.address.uuid);
77
+ }
45
78
  });
46
79
  const isOwnedByExistingPreserved = (box) => {
47
80
  for (const [pointer, targetAddress] of box.outgoingEdges()) {
@@ -68,6 +101,9 @@ export var TransferUtils;
68
101
  if (existingPreservedUuids.hasKey(source.address.uuid)) {
69
102
  return;
70
103
  }
104
+ if (existingModulatorUuids.hasKey(source.address.uuid)) {
105
+ return;
106
+ }
71
107
  if (isOwnedByExistingPreserved(source)) {
72
108
  return;
73
109
  }
@@ -123,11 +159,11 @@ export var TransferUtils;
123
159
  const excludeBox = (box) => TransferUtils.shouldExclude(box)
124
160
  || (isInstanceOf(box, TrackBox) && !trackBoxSet.has(box))
125
161
  || (UnionBoxTypes.isRegionBox(box) && !regionBoxSet.has(box));
126
- const dependencies = Array.from(audioUnitBoxes[0].graph.dependenciesOf(audioUnitBoxes, {
162
+ const dependencies = TransferUtils.withModulators(Array.from(audioUnitBoxes[0].graph.dependenciesOf(audioUnitBoxes, {
127
163
  alwaysFollowMandatory: true,
128
164
  stopAtResources: true,
129
165
  excludeBox
130
- }).boxes);
166
+ }).boxes));
131
167
  const uuidMap = TransferUtils.generateMap(audioUnitBoxes, dependencies, rootBox.audioUnits.address.uuid, primaryAudioBusBox.address.uuid);
132
168
  TransferUtils.copyBoxes(uuidMap, boxGraph, audioUnitBoxes, dependencies);
133
169
  TransferUtils.reorderAudioUnits(uuidMap, audioUnitBoxes, rootBox);
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@opendaw/studio-adapters",
3
- "version": "0.3.1",
4
- "license": "LGPL-3.0-or-later",
3
+ "version": "0.3.3",
4
+ "license": "AGPL-3.0-or-later",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -25,19 +25,19 @@
25
25
  "pregenerate-all-boxes": "npm run build -w @opendaw/studio-forge-boxes && npm run build -w @opendaw/studio-boxes"
26
26
  },
27
27
  "dependencies": {
28
- "@opendaw/lib-box": "^0.0.92",
29
- "@opendaw/lib-dsp": "^0.0.91",
30
- "@opendaw/lib-fusion": "^0.0.101",
31
- "@opendaw/lib-midi": "^0.0.72",
32
- "@opendaw/lib-runtime": "^0.0.84",
33
- "@opendaw/lib-std": "^0.0.83",
34
- "@opendaw/studio-boxes": "^0.0.107",
35
- "@opendaw/studio-enums": "^0.1.0",
28
+ "@opendaw/lib-box": "^0.0.94",
29
+ "@opendaw/lib-dsp": "^0.0.93",
30
+ "@opendaw/lib-fusion": "^0.0.103",
31
+ "@opendaw/lib-midi": "^0.0.74",
32
+ "@opendaw/lib-runtime": "^0.0.86",
33
+ "@opendaw/lib-std": "^0.0.85",
34
+ "@opendaw/studio-boxes": "^0.0.109",
35
+ "@opendaw/studio-enums": "^0.1.2",
36
36
  "soundfont2": "^0.5.0"
37
37
  },
38
38
  "devDependencies": {
39
39
  "@opendaw/eslint-config": "^0.0.28",
40
40
  "@opendaw/typescript-config": "^0.0.32"
41
41
  },
42
- "gitHead": "e1495bbd78b89e262bcd72141dde0344bc328326"
42
+ "gitHead": "876a44565e343971b47d6ab815f2f4ef73bd9de7"
43
43
  }