@opendaw/studio-adapters 0.3.0 → 0.3.2

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 (62) hide show
  1. package/dist/AutomatableParameterFieldAdapter.d.ts +9 -5
  2. package/dist/AutomatableParameterFieldAdapter.d.ts.map +1 -1
  3. package/dist/AutomatableParameterFieldAdapter.js +61 -40
  4. package/dist/BoxAdapters.d.ts.map +1 -1
  5. package/dist/BoxAdapters.js +12 -0
  6. package/dist/DeviceManualUrls.d.ts +4 -3
  7. package/dist/DeviceManualUrls.d.ts.map +1 -1
  8. package/dist/DeviceManualUrls.js +4 -3
  9. package/dist/ParameterFieldAdapters.d.ts +3 -7
  10. package/dist/ParameterFieldAdapters.d.ts.map +1 -1
  11. package/dist/ParameterFieldAdapters.js +2 -15
  12. package/dist/ParameterOwner.d.ts +10 -0
  13. package/dist/ParameterOwner.d.ts.map +1 -0
  14. package/dist/ParameterOwner.js +77 -0
  15. package/dist/RootBoxAdapter.d.ts +2 -0
  16. package/dist/RootBoxAdapter.d.ts.map +1 -1
  17. package/dist/RootBoxAdapter.js +8 -2
  18. package/dist/audio-unit/AudioUnitTracks.d.ts +2 -15
  19. package/dist/audio-unit/AudioUnitTracks.d.ts.map +1 -1
  20. package/dist/audio-unit/AudioUnitTracks.js +5 -59
  21. package/dist/devices/audio-effects/ConvolverDeviceBoxAdapter.d.ts +35 -0
  22. package/dist/devices/audio-effects/ConvolverDeviceBoxAdapter.d.ts.map +1 -0
  23. package/dist/devices/audio-effects/ConvolverDeviceBoxAdapter.js +60 -0
  24. package/dist/devices/audio-effects/ReverbDeviceBoxAdapter.d.ts +1 -1
  25. package/dist/devices/audio-effects/ReverbDeviceBoxAdapter.d.ts.map +1 -1
  26. package/dist/devices/audio-effects/StereoToolDeviceBoxAdapter.d.ts +1 -1
  27. package/dist/devices/audio-effects/StereoToolDeviceBoxAdapter.d.ts.map +1 -1
  28. package/dist/devices/instruments/MIDIOutputDeviceBoxAdapter.d.ts +1 -1
  29. package/dist/devices/instruments/MIDIOutputDeviceBoxAdapter.d.ts.map +1 -1
  30. package/dist/index.d.ts +10 -0
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +10 -0
  33. package/dist/modulation/LfoModulatorBoxAdapter.d.ts +31 -0
  34. package/dist/modulation/LfoModulatorBoxAdapter.d.ts.map +1 -0
  35. package/dist/modulation/LfoModulatorBoxAdapter.js +48 -0
  36. package/dist/modulation/MacroModulatorBoxAdapter.d.ts +11 -0
  37. package/dist/modulation/MacroModulatorBoxAdapter.d.ts.map +1 -0
  38. package/dist/modulation/MacroModulatorBoxAdapter.js +21 -0
  39. package/dist/modulation/ModulationBoxAdapter.d.ts +27 -0
  40. package/dist/modulation/ModulationBoxAdapter.d.ts.map +1 -0
  41. package/dist/modulation/ModulationBoxAdapter.js +72 -0
  42. package/dist/modulation/ModulatorBoxAdapter.d.ts +35 -0
  43. package/dist/modulation/ModulatorBoxAdapter.d.ts.map +1 -0
  44. package/dist/modulation/ModulatorBoxAdapter.js +69 -0
  45. package/dist/modulation/Modulators.d.ts +25 -0
  46. package/dist/modulation/Modulators.d.ts.map +1 -0
  47. package/dist/modulation/Modulators.js +110 -0
  48. package/dist/modulation/RandomModulatorBoxAdapter.d.ts +22 -0
  49. package/dist/modulation/RandomModulatorBoxAdapter.d.ts.map +1 -0
  50. package/dist/modulation/RandomModulatorBoxAdapter.js +60 -0
  51. package/dist/modulation/StepsModulatorBoxAdapter.d.ts +40 -0
  52. package/dist/modulation/StepsModulatorBoxAdapter.d.ts.map +1 -0
  53. package/dist/modulation/StepsModulatorBoxAdapter.js +99 -0
  54. package/dist/protocols.d.ts +2 -0
  55. package/dist/protocols.d.ts.map +1 -1
  56. package/dist/timeline/ParameterTracks.d.ts +30 -0
  57. package/dist/timeline/ParameterTracks.d.ts.map +1 -0
  58. package/dist/timeline/ParameterTracks.js +75 -0
  59. package/dist/timeline/TrackBoxAdapter.d.ts +1 -0
  60. package/dist/timeline/TrackBoxAdapter.d.ts.map +1 -1
  61. package/dist/timeline/TrackBoxAdapter.js +21 -27
  62. package/package.json +10 -10
@@ -1,9 +1,10 @@
1
1
  import { ControlSourceListener, ObservableValue, Observer, Option, Parameter, StringMapping, StringResult, Subscription, Terminable, unitValue, ValueMapping } from "@opendaw/lib-std";
2
2
  import { ppqn } from "@opendaw/lib-dsp";
3
- import { Address, PrimitiveField, PrimitiveType, PrimitiveValues } from "@opendaw/lib-box";
3
+ import { Address, Field, PrimitiveField, PrimitiveType, PrimitiveValues } from "@opendaw/lib-box";
4
4
  import { Pointers } from "@opendaw/studio-enums";
5
+ import { ModulationBox } from "@opendaw/studio-boxes";
5
6
  import { TrackBoxAdapter } from "./timeline/TrackBoxAdapter";
6
- import { AudioUnitTracks } from "./audio-unit/AudioUnitTracks";
7
+ import { ParameterTracks } from "./timeline/ParameterTracks";
7
8
  import { BoxAdaptersContext } from "./BoxAdaptersContext";
8
9
  export declare class AutomatableParameterFieldAdapter<T extends PrimitiveValues = any> implements Parameter<T>, Terminable {
9
10
  #private;
@@ -16,13 +17,16 @@ export declare class AutomatableParameterFieldAdapter<T extends PrimitiveValues
16
17
  get anchor(): unitValue;
17
18
  get type(): PrimitiveType;
18
19
  get address(): Address;
20
+ get context(): BoxAdaptersContext;
19
21
  get track(): Option<TrackBoxAdapter>;
22
+ get modulationTarget(): Field<Pointers.Modulation>;
23
+ get modulations(): ReadonlyArray<ModulationBox>;
20
24
  catchupAndSubscribeName(observer: Observer<string>): Subscription;
21
- registerTracks(tracks: AudioUnitTracks): Terminable;
22
- touchStart(): void;
23
- touchEnd(): void;
25
+ registerTracks(tracks: ParameterTracks): Terminable;
26
+ optTracks(): Option<ParameterTracks>;
24
27
  updateMappings(valueMapping: ValueMapping<T>, stringMapping: StringMapping<T>): void;
25
28
  valueAt(position: ppqn): T;
29
+ notifyPrinting(): void;
26
30
  subscribe(observer: Observer<AutomatableParameterFieldAdapter<T>>): Subscription;
27
31
  catchupAndSubscribe(observer: Observer<AutomatableParameterFieldAdapter<T>>): Subscription;
28
32
  catchupAndSubscribeControlSources(observer: ControlSourceListener): Subscription;
@@ -1 +1 @@
1
- {"version":3,"file":"AutomatableParameterFieldAdapter.d.ts","sourceRoot":"","sources":["../src/AutomatableParameterFieldAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAIH,qBAAqB,EAKrB,eAAe,EACf,QAAQ,EACR,MAAM,EAEN,SAAS,EACT,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,UAAU,EAEV,SAAS,EACT,YAAY,EACf,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAC,IAAI,EAAC,MAAM,kBAAkB,CAAA;AACrC,OAAO,EAAC,OAAO,EAA8B,cAAc,EAAE,aAAa,EAAE,eAAe,EAAC,MAAM,kBAAkB,CAAA;AACpH,OAAO,EAAC,QAAQ,EAAC,MAAM,uBAAuB,CAAA;AAE9C,OAAO,EAAC,eAAe,EAAC,MAAM,4BAA4B,CAAA;AAC1D,OAAO,EAAC,eAAe,EAAC,MAAM,8BAA8B,CAAA;AAC5D,OAAO,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAA;AAQvD,qBAAa,gCAAgC,CAAC,CAAC,SAAS,eAAe,GAAG,GAAG,CAAE,YAAW,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU;;gBAmBlG,OAAO,EAAE,kBAAkB,EAC3B,KAAK,EAAE,cAAc,CAAC,CAAC,EAAE,GAAG,CAAC,EAC7B,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,EAC7B,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC,EAC/B,IAAI,EAAE,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,EACtC,MAAM,CAAC,EAAE,SAAS,EAClB,UAAU,CAAC,EAAE,CAAC;IAsE1B,mBAAmB,IAAI,UAAU;IAWjC,IAAI,KAAK,IAAI,cAAc,CAAC,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAqB;IACxE,IAAI,YAAY,IAAI,YAAY,CAAC,CAAC,CAAC,CAA4B;IAC/D,IAAI,aAAa,IAAI,aAAa,CAAC,CAAC,CAAC,CAA6B;IAClE,IAAI,IAAI,IAAI,MAAM,CAA+B;IACjD,IAAI,MAAM,IAAI,SAAS,CAAsB;IAC7C,IAAI,IAAI,IAAI,aAAa,CAA0B;IACnD,IAAI,OAAO,IAAI,OAAO,CAA6B;IACnD,IAAI,KAAK,IAAI,MAAM,CAAC,eAAe,CAAC,CAA+B;IAEnE,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,YAAY;IAIjE,cAAc,CAAC,MAAM,EAAE,eAAe,GAAG,UAAU;IAGnD,UAAU,IAAI,IAAI;IAIlB,QAAQ,IAAI,IAAI;IAEhB,cAAc,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI;IAMpF,OAAO,CAAC,QAAQ,EAAE,IAAI,GAAG,CAAC;IAW1B,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,gCAAgC,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY;IAIhF,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,gCAAgC,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY;IAK1F,iCAAiC,CAAC,QAAQ,EAAE,qBAAqB,GAAG,YAAY;IAMhF,QAAQ,IAAI,CAAC;IACb,QAAQ,CAAC,KAAK,EAAE,CAAC;IAMjB,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IACpC,YAAY,IAAI,SAAS;IACzB,kBAAkB,IAAI,CAAC;IACvB,sBAAsB,IAAI,SAAS;IACnC,uBAAuB,IAAI,QAAQ,CAAC,YAAY,CAAC;IACjD,aAAa,IAAI,QAAQ,CAAC,YAAY,CAAC;IACvC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAWjC,KAAK,IAAI,IAAI;IAEb,SAAS,IAAI,IAAI;CAKpB"}
1
+ {"version":3,"file":"AutomatableParameterFieldAdapter.d.ts","sourceRoot":"","sources":["../src/AutomatableParameterFieldAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAKH,qBAAqB,EAKrB,eAAe,EACf,QAAQ,EACR,MAAM,EAEN,SAAS,EACT,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,UAAU,EAEV,SAAS,EACT,YAAY,EACf,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAC,IAAI,EAAC,MAAM,kBAAkB,CAAA;AACrC,OAAO,EAAC,OAAO,EAAE,KAAK,EAA8B,cAAc,EAAE,aAAa,EAAE,eAAe,EAAC,MAAM,kBAAkB,CAAA;AAC3H,OAAO,EAAC,QAAQ,EAAC,MAAM,uBAAuB,CAAA;AAC9C,OAAO,EAAa,aAAa,EAAW,MAAM,uBAAuB,CAAA;AACzE,OAAO,EAAC,eAAe,EAAC,MAAM,4BAA4B,CAAA;AAC1D,OAAO,EAAC,eAAe,EAAC,MAAM,4BAA4B,CAAA;AAE1D,OAAO,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAA;AAQvD,qBAAa,gCAAgC,CAAC,CAAC,SAAS,eAAe,GAAG,GAAG,CAAE,YAAW,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU;;gBAoBlG,OAAO,EAAE,kBAAkB,EAC3B,KAAK,EAAE,cAAc,CAAC,CAAC,EAAE,GAAG,CAAC,EAC7B,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,EAC7B,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC,EAC/B,IAAI,EAAE,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,EACtC,MAAM,CAAC,EAAE,SAAS,EAClB,UAAU,CAAC,EAAE,CAAC;IAuE1B,mBAAmB,IAAI,UAAU;IAWjC,IAAI,KAAK,IAAI,cAAc,CAAC,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAqB;IACxE,IAAI,YAAY,IAAI,YAAY,CAAC,CAAC,CAAC,CAA4B;IAC/D,IAAI,aAAa,IAAI,aAAa,CAAC,CAAC,CAAC,CAA6B;IAClE,IAAI,IAAI,IAAI,MAAM,CAA+B;IACjD,IAAI,MAAM,IAAI,SAAS,CAAsB;IAC7C,IAAI,IAAI,IAAI,aAAa,CAA0B;IACnD,IAAI,OAAO,IAAI,OAAO,CAA6B;IACnD,IAAI,OAAO,IAAI,kBAAkB,CAAuB;IACxD,IAAI,KAAK,IAAI,MAAM,CAAC,eAAe,CAAC,CAA+B;IAGnE,IAAI,gBAAgB,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAEjD;IACD,IAAI,WAAW,IAAI,aAAa,CAAC,aAAa,CAAC,CAG9C;IAED,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,YAAY;IAIjE,cAAc,CAAC,MAAM,EAAE,eAAe,GAAG,UAAU;IAMnD,SAAS,IAAI,MAAM,CAAC,eAAe,CAAC;IAMpC,cAAc,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI;IAMpF,OAAO,CAAC,QAAQ,EAAE,IAAI,GAAG,CAAC;IAW1B,cAAc,IAAI,IAAI;IAEtB,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,gCAAgC,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY;IAIhF,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,gCAAgC,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY;IAK1F,iCAAiC,CAAC,QAAQ,EAAE,qBAAqB,GAAG,YAAY;IAMhF,QAAQ,IAAI,CAAC;IACb,QAAQ,CAAC,KAAK,EAAE,CAAC;IAMjB,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IACpC,YAAY,IAAI,SAAS;IACzB,kBAAkB,IAAI,CAAC;IAGvB,sBAAsB,IAAI,SAAS;IAInC,uBAAuB,IAAI,QAAQ,CAAC,YAAY,CAAC;IACjD,aAAa,IAAI,QAAQ,CAAC,YAAY,CAAC;IACvC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAYjC,KAAK,IAAI,IAAI;IAEb,SAAS,IAAI,IAAI;CAKpB"}
@@ -9,10 +9,12 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
9
9
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
10
10
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
11
11
  };
12
- var _AutomatableParameterFieldAdapter_context, _AutomatableParameterFieldAdapter_field, _AutomatableParameterFieldAdapter_name, _AutomatableParameterFieldAdapter_anchor, _AutomatableParameterFieldAdapter_resetValue, _AutomatableParameterFieldAdapter_terminator, _AutomatableParameterFieldAdapter_valueChangeNotifier, _AutomatableParameterFieldAdapter_controlSource, _AutomatableParameterFieldAdapter_valueMapping, _AutomatableParameterFieldAdapter_stringMapping, _AutomatableParameterFieldAdapter_trackBoxAdapter, _AutomatableParameterFieldAdapter_automationHandle, _AutomatableParameterFieldAdapter_controlledValue, _AutomatableParameterFieldAdapter_midiControlled;
13
- import { assert, clamp, isNull, Listeners, Notifier, ObservableValue, Option, panic, Terminator } from "@opendaw/lib-std";
12
+ var _AutomatableParameterFieldAdapter_instances, _AutomatableParameterFieldAdapter_context, _AutomatableParameterFieldAdapter_field, _AutomatableParameterFieldAdapter_name, _AutomatableParameterFieldAdapter_anchor, _AutomatableParameterFieldAdapter_resetValue, _AutomatableParameterFieldAdapter_terminator, _AutomatableParameterFieldAdapter_valueChangeNotifier, _AutomatableParameterFieldAdapter_controlSource, _AutomatableParameterFieldAdapter_valueMapping, _AutomatableParameterFieldAdapter_stringMapping, _AutomatableParameterFieldAdapter_trackBoxAdapter, _AutomatableParameterFieldAdapter_automationHandle, _AutomatableParameterFieldAdapter_controlledValue, _AutomatableParameterFieldAdapter_modulationValue, _AutomatableParameterFieldAdapter_midiControlled, _AutomatableParameterFieldAdapter_observeEngineValue, _AutomatableParameterFieldAdapter_releaseEngineValue;
13
+ import { assert, asInstanceOf, clamp, isNull, Listeners, Notifier, ObservableValue, Option, panic, StringMapping, Terminator } from "@opendaw/lib-std";
14
14
  import { Pointers } from "@opendaw/studio-enums";
15
+ import { ModulationBox } from "@opendaw/studio-boxes";
15
16
  import { TrackBoxAdapter } from "./timeline/TrackBoxAdapter";
17
+ import { ParameterOwner } from "./ParameterOwner";
16
18
  const ExternalControlTypes = [
17
19
  Pointers.Automation,
18
20
  Pointers.Modulation,
@@ -21,6 +23,7 @@ const ExternalControlTypes = [
21
23
  ];
22
24
  export class AutomatableParameterFieldAdapter {
23
25
  constructor(context, field, valueMapping, stringMapping, name, anchor, resetValue) {
26
+ _AutomatableParameterFieldAdapter_instances.add(this);
24
27
  _AutomatableParameterFieldAdapter_context.set(this, void 0);
25
28
  _AutomatableParameterFieldAdapter_field.set(this, void 0);
26
29
  _AutomatableParameterFieldAdapter_name.set(this, void 0);
@@ -34,6 +37,7 @@ export class AutomatableParameterFieldAdapter {
34
37
  _AutomatableParameterFieldAdapter_trackBoxAdapter.set(this, Option.None);
35
38
  _AutomatableParameterFieldAdapter_automationHandle.set(this, Option.None);
36
39
  _AutomatableParameterFieldAdapter_controlledValue.set(this, null);
40
+ _AutomatableParameterFieldAdapter_modulationValue.set(this, null);
37
41
  _AutomatableParameterFieldAdapter_midiControlled.set(this, false);
38
42
  __classPrivateFieldSet(this, _AutomatableParameterFieldAdapter_context, context, "f");
39
43
  __classPrivateFieldSet(this, _AutomatableParameterFieldAdapter_field, field, "f");
@@ -52,33 +56,10 @@ export class AutomatableParameterFieldAdapter {
52
56
  pointer.box.accept({
53
57
  visitTrackBox: (box) => {
54
58
  assert(__classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_trackBoxAdapter, "f").isEmpty(), "Already assigned");
55
- const adapter = __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_context, "f").boxAdapters.adapterFor(box, TrackBoxAdapter);
56
- __classPrivateFieldSet(this, _AutomatableParameterFieldAdapter_trackBoxAdapter, Option.wrap(adapter), "f");
57
- if (__classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_context, "f").isMainThread) {
58
- __classPrivateFieldSet(this, _AutomatableParameterFieldAdapter_automationHandle, Option.wrap(__classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_context, "f").liveStreamReceiver
59
- .subscribeFloat(__classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_field, "f").address, value => {
60
- // NaN is the engine's "the curve yields NO value here" sentinel: automation
61
- // is attached but has no region / clip / events yet. The parameter must then
62
- // keep showing its STORAGE value (`getControlledUnitValue` falls back to
63
- // `getUnitValue` while `#controlledValue` is null) — a real value of 0 would
64
- // otherwise read as unit 0, pinning the knob to its minimum.
65
- if (isNaN(value)) {
66
- if (isNull(__classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_controlledValue, "f"))) {
67
- return;
68
- }
69
- __classPrivateFieldSet(this, _AutomatableParameterFieldAdapter_controlledValue, null, "f");
70
- __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_valueChangeNotifier, "f").notify(this);
71
- return;
72
- }
73
- if (__classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_controlledValue, "f") === value) {
74
- return;
75
- }
76
- __classPrivateFieldSet(this, _AutomatableParameterFieldAdapter_controlledValue, value, "f");
77
- __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_valueChangeNotifier, "f").notify(this);
78
- })), "f");
79
- }
59
+ __classPrivateFieldSet(this, _AutomatableParameterFieldAdapter_trackBoxAdapter, Option.wrap(__classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_context, "f").boxAdapters.adapterFor(box, TrackBoxAdapter)), "f");
80
60
  }
81
61
  });
62
+ __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_instances, "m", _AutomatableParameterFieldAdapter_observeEngineValue).call(this);
82
63
  },
83
64
  onRemoved: (pointer) => {
84
65
  __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_controlSource, "f").proxy.onControlSourceRemove(mapPointerToControlSource(pointer.pointerType));
@@ -86,14 +67,9 @@ export class AutomatableParameterFieldAdapter {
86
67
  visitTrackBox: (box) => {
87
68
  assert(__classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_trackBoxAdapter, "f").unwrapOrNull()?.address?.equals(box.address) === true, `Unknown ${box}`);
88
69
  __classPrivateFieldSet(this, _AutomatableParameterFieldAdapter_trackBoxAdapter, Option.None, "f");
89
- if (__classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_context, "f").isMainThread) {
90
- __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_automationHandle, "f").ifSome(handle => handle.terminate());
91
- __classPrivateFieldSet(this, _AutomatableParameterFieldAdapter_automationHandle, Option.None, "f");
92
- __classPrivateFieldSet(this, _AutomatableParameterFieldAdapter_controlledValue, null, "f");
93
- __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_valueChangeNotifier, "f").notify(this);
94
- }
95
70
  }
96
71
  });
72
+ __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_instances, "m", _AutomatableParameterFieldAdapter_releaseEngineValue).call(this);
97
73
  }
98
74
  }, ...ExternalControlTypes));
99
75
  /*
@@ -123,18 +99,32 @@ export class AutomatableParameterFieldAdapter {
123
99
  get anchor() { return __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_anchor, "f"); }
124
100
  get type() { return __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_field, "f").type; }
125
101
  get address() { return __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_field, "f").address; }
102
+ get context() { return __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_context, "f"); }
126
103
  get track() { return __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_trackBoxAdapter, "f"); }
104
+ /// Every parameter field accepts `Modulation` (`ParameterPointerRules`), but the adapter types it by the
105
+ /// automation pointer it was built for.
106
+ get modulationTarget() {
107
+ return __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_field, "f");
108
+ }
109
+ get modulations() {
110
+ return __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_field, "f").pointerHub.filter(Pointers.Modulation)
111
+ .map(pointer => asInstanceOf(pointer.box, ModulationBox));
112
+ }
127
113
  catchupAndSubscribeName(observer) {
128
114
  return __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_name, "f").catchupAndSubscribe(owner => observer(owner.getValue()));
129
115
  }
130
116
  registerTracks(tracks) {
131
117
  return __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_context, "f").parameterFieldAdapters.registerTracks(this.address, tracks);
132
118
  }
133
- touchStart() {
134
- __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_context, "f").parameterFieldAdapters.touchStart(this.address);
135
- __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_context, "f").parameterFieldAdapters.notifyWrite(this, this.getUnitValue());
119
+ /// Where this parameter's automation lanes live. A modulator registers itself as the owner, everything else
120
+ /// falls back to the audio unit the parameter belongs to, so a lane resolves with no editor mounted.
121
+ optTracks() {
122
+ const registered = __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_context, "f").parameterFieldAdapters.getTracks(this.address);
123
+ if (registered.nonEmpty()) {
124
+ return registered;
125
+ }
126
+ return ParameterOwner.audioUnitOf(__classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_context, "f"), __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_field, "f")).map(adapter => adapter.tracks);
136
127
  }
137
- touchEnd() { __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_context, "f").parameterFieldAdapters.touchEnd(this.address); }
138
128
  updateMappings(valueMapping, stringMapping) {
139
129
  __classPrivateFieldSet(this, _AutomatableParameterFieldAdapter_valueMapping, valueMapping, "f");
140
130
  __classPrivateFieldSet(this, _AutomatableParameterFieldAdapter_stringMapping, stringMapping, "f");
@@ -150,6 +140,7 @@ export class AutomatableParameterFieldAdapter {
150
140
  }
151
141
  return this.getValue();
152
142
  }
143
+ notifyPrinting() { __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_valueChangeNotifier, "f").notify(this); }
153
144
  subscribe(observer) {
154
145
  return __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_valueChangeNotifier, "f").subscribe(observer);
155
146
  }
@@ -177,11 +168,17 @@ export class AutomatableParameterFieldAdapter {
177
168
  setUnitValue(value) { this.setValue(__classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_valueMapping, "f").y(value)); }
178
169
  getUnitValue() { return __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_valueMapping, "f").x(this.getValue()); }
179
170
  getControlledValue() { return __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_valueMapping, "f").y(this.getControlledUnitValue()); }
180
- getControlledUnitValue() { return __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_controlledValue, "f") ?? this.getUnitValue(); }
171
+ // The engine cannot fold these itself: for an unautomated parameter it holds the storage value in the
172
+ // parameter's real unit, and the mapping lives here (and in the device).
173
+ getControlledUnitValue() {
174
+ const base = __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_controlledValue, "f") ?? this.getUnitValue();
175
+ return isNull(__classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_modulationValue, "f")) ? base : clamp(base + __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_modulationValue, "f"), 0.0, 1.0);
176
+ }
181
177
  getControlledPrintValue() { return __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_stringMapping, "f").x(this.getControlledValue()); }
182
178
  getPrintValue() { return __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_stringMapping, "f").x(this.getValue()); }
183
179
  setPrintValue(text) {
184
- const result = __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_stringMapping, "f").y(text);
180
+ // bare numbers mean the unit the label currently displays ("10" while showing "ms" = 10 ms)
181
+ const result = __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_stringMapping, "f").y(StringMapping.withDisplayUnit(text, this.getPrintValue().unit));
185
182
  if (result.type === "unitValue") {
186
183
  this.setUnitValue(clamp(result.value, 0.0, 1.0));
187
184
  }
@@ -199,7 +196,31 @@ export class AutomatableParameterFieldAdapter {
199
196
  __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_terminator, "f").terminate();
200
197
  }
201
198
  }
202
- _AutomatableParameterFieldAdapter_context = new WeakMap(), _AutomatableParameterFieldAdapter_field = new WeakMap(), _AutomatableParameterFieldAdapter_name = new WeakMap(), _AutomatableParameterFieldAdapter_anchor = new WeakMap(), _AutomatableParameterFieldAdapter_resetValue = new WeakMap(), _AutomatableParameterFieldAdapter_terminator = new WeakMap(), _AutomatableParameterFieldAdapter_valueChangeNotifier = new WeakMap(), _AutomatableParameterFieldAdapter_controlSource = new WeakMap(), _AutomatableParameterFieldAdapter_valueMapping = new WeakMap(), _AutomatableParameterFieldAdapter_stringMapping = new WeakMap(), _AutomatableParameterFieldAdapter_trackBoxAdapter = new WeakMap(), _AutomatableParameterFieldAdapter_automationHandle = new WeakMap(), _AutomatableParameterFieldAdapter_controlledValue = new WeakMap(), _AutomatableParameterFieldAdapter_midiControlled = new WeakMap();
199
+ _AutomatableParameterFieldAdapter_context = new WeakMap(), _AutomatableParameterFieldAdapter_field = new WeakMap(), _AutomatableParameterFieldAdapter_name = new WeakMap(), _AutomatableParameterFieldAdapter_anchor = new WeakMap(), _AutomatableParameterFieldAdapter_resetValue = new WeakMap(), _AutomatableParameterFieldAdapter_terminator = new WeakMap(), _AutomatableParameterFieldAdapter_valueChangeNotifier = new WeakMap(), _AutomatableParameterFieldAdapter_controlSource = new WeakMap(), _AutomatableParameterFieldAdapter_valueMapping = new WeakMap(), _AutomatableParameterFieldAdapter_stringMapping = new WeakMap(), _AutomatableParameterFieldAdapter_trackBoxAdapter = new WeakMap(), _AutomatableParameterFieldAdapter_automationHandle = new WeakMap(), _AutomatableParameterFieldAdapter_controlledValue = new WeakMap(), _AutomatableParameterFieldAdapter_modulationValue = new WeakMap(), _AutomatableParameterFieldAdapter_midiControlled = new WeakMap(), _AutomatableParameterFieldAdapter_instances = new WeakSet(), _AutomatableParameterFieldAdapter_observeEngineValue = function _AutomatableParameterFieldAdapter_observeEngineValue() {
200
+ if (!__classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_context, "f").isMainThread || __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_automationHandle, "f").nonEmpty()) {
201
+ return;
202
+ }
203
+ __classPrivateFieldSet(this, _AutomatableParameterFieldAdapter_automationHandle, Option.wrap(__classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_context, "f").liveStreamReceiver
204
+ .subscribeFloats(__classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_field, "f").address, values => {
205
+ const automated = isNaN(values[0]) ? null : values[0];
206
+ const modulation = isNaN(values[1]) ? null : values[1];
207
+ if (__classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_controlledValue, "f") === automated && __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_modulationValue, "f") === modulation) {
208
+ return;
209
+ }
210
+ __classPrivateFieldSet(this, _AutomatableParameterFieldAdapter_controlledValue, automated, "f");
211
+ __classPrivateFieldSet(this, _AutomatableParameterFieldAdapter_modulationValue, modulation, "f");
212
+ __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_valueChangeNotifier, "f").notify(this);
213
+ })), "f");
214
+ }, _AutomatableParameterFieldAdapter_releaseEngineValue = function _AutomatableParameterFieldAdapter_releaseEngineValue() {
215
+ if (!__classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_context, "f").isMainThread || __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_field, "f").pointerHub.filter(...ExternalControlTypes).length > 0) {
216
+ return;
217
+ }
218
+ __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_automationHandle, "f").ifSome(handle => handle.terminate());
219
+ __classPrivateFieldSet(this, _AutomatableParameterFieldAdapter_automationHandle, Option.None, "f");
220
+ __classPrivateFieldSet(this, _AutomatableParameterFieldAdapter_controlledValue, null, "f");
221
+ __classPrivateFieldSet(this, _AutomatableParameterFieldAdapter_modulationValue, null, "f");
222
+ __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_valueChangeNotifier, "f").notify(this);
223
+ };
203
224
  const mapPointerToControlSource = (pointer) => {
204
225
  switch (pointer) {
205
226
  case Pointers.Automation:
@@ -1 +1 @@
1
- {"version":3,"file":"BoxAdapters.d.ts","sourceRoot":"","sources":["../src/BoxAdapters.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,UAAU,EACV,KAAK,EAEL,MAAM,EAIN,UAAU,EAEb,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAC,GAAG,EAAS,MAAM,kBAAkB,CAAA;AA2H5C,OAAO,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAA;AA6BvC,qBAAa,WAAY,YAAW,UAAU;;gBAO9B,OAAO,EAAE,kBAAkB;IAkBvC,SAAS,IAAI,IAAI;IAMjB,UAAU,CAAC,GAAG,SAAS,GAAG,EAAE,CAAC,SAAS,UAAU,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC;IAkBnG,UAAU,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC;CA+E3C"}
1
+ {"version":3,"file":"BoxAdapters.d.ts","sourceRoot":"","sources":["../src/BoxAdapters.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,UAAU,EACV,KAAK,EAEL,MAAM,EAIN,UAAU,EAEb,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAC,GAAG,EAAS,MAAM,kBAAkB,CAAA;AAiI5C,OAAO,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAA;AAmCvC,qBAAa,WAAY,YAAW,UAAU;;gBAO9B,OAAO,EAAE,kBAAkB;IAkBvC,SAAS,IAAI,IAAI;IAMjB,UAAU,CAAC,GAAG,SAAS,GAAG,EAAE,CAAC,SAAS,UAAU,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC;IAkBnG,UAAU,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC;CAqF3C"}
@@ -59,6 +59,11 @@ import { FrequencySplitBoxAdapter } from "./devices/audio-effects/FrequencySplit
59
59
  import { AudioEffectCompositeCellBoxAdapter } from "./devices/audio-effects/AudioEffectComposite/AudioEffectCompositeCellBoxAdapter";
60
60
  import { ZeitgeistDeviceBoxAdapter } from "./devices/midi-effects/ZeitgeistDeviceBoxAdapter";
61
61
  import { GrooveShuffleBoxAdapter } from "./grooves/GrooveShuffleBoxAdapter";
62
+ import { LfoModulatorBoxAdapter } from "./modulation/LfoModulatorBoxAdapter";
63
+ import { StepsModulatorBoxAdapter } from "./modulation/StepsModulatorBoxAdapter";
64
+ import { MacroModulatorBoxAdapter } from "./modulation/MacroModulatorBoxAdapter";
65
+ import { RandomModulatorBoxAdapter } from "./modulation/RandomModulatorBoxAdapter";
66
+ import { ModulationBoxAdapter } from "./modulation/ModulationBoxAdapter";
62
67
  import { UnknownAudioEffectDeviceBoxAdapter } from "./devices/audio-effects/UnknownAudioEffectDeviceBoxAdapter";
63
68
  import { UnknownMidiEffectDeviceBoxAdapter } from "./devices/midi-effects/UnknownMidiEffectDeviceBoxAdapter";
64
69
  import { SoundfontDeviceBoxAdapter } from "./devices/instruments/SoundfontDeviceBoxAdapter";
@@ -73,6 +78,7 @@ import { MIDIOutputDeviceBoxAdapter } from "./devices/instruments/MIDIOutputDevi
73
78
  import { VelocityDeviceBoxAdapter } from "./devices/midi-effects/VelocityDeviceBoxAdapter";
74
79
  import { TidalDeviceBoxAdapter } from "./devices/audio-effects/TidalDeviceBoxAdapter";
75
80
  import { VocoderDeviceBoxAdapter } from "./devices/audio-effects/VocoderDeviceBoxAdapter";
81
+ import { ConvolverDeviceBoxAdapter } from "./devices/audio-effects/ConvolverDeviceBoxAdapter";
76
82
  import { DattorroReverbDeviceBoxAdapter } from "./devices/audio-effects/DattorroReverbDeviceBoxAdapter";
77
83
  import { NeuralAmpDeviceBoxAdapter } from "./devices/audio-effects/NeuralAmpDeviceBoxAdapter";
78
84
  import { WaveshaperDeviceBoxAdapter } from "./devices/audio-effects/WaveshaperDeviceBoxAdapter";
@@ -151,12 +157,18 @@ _BoxAdapters_context = new WeakMap(), _BoxAdapters_adapters = new WeakMap(), _Bo
151
157
  visitGateDeviceBox: (box) => new GateDeviceBoxAdapter(__classPrivateFieldGet(this, _BoxAdapters_context, "f"), box),
152
158
  visitAutotuneDeviceBox: (box) => new AutotuneDeviceBoxAdapter(__classPrivateFieldGet(this, _BoxAdapters_context, "f"), box),
153
159
  visitCrusherDeviceBox: (box) => new CrusherDeviceBoxAdapter(__classPrivateFieldGet(this, _BoxAdapters_context, "f"), box),
160
+ visitConvolverDeviceBox: (box) => new ConvolverDeviceBoxAdapter(__classPrivateFieldGet(this, _BoxAdapters_context, "f"), box),
154
161
  visitDattorroReverbDeviceBox: (box) => new DattorroReverbDeviceBoxAdapter(__classPrivateFieldGet(this, _BoxAdapters_context, "f"), box),
155
162
  visitDelayDeviceBox: (box) => new DelayDeviceBoxAdapter(__classPrivateFieldGet(this, _BoxAdapters_context, "f"), box),
156
163
  visitDeviceInterfaceKnobBox: (box) => new DeviceInterfaceKnobAdapter(__classPrivateFieldGet(this, _BoxAdapters_context, "f"), box),
157
164
  visitTidalDeviceBox: (box) => new TidalDeviceBoxAdapter(__classPrivateFieldGet(this, _BoxAdapters_context, "f"), box),
158
165
  visitFoldDeviceBox: (box) => new FoldDeviceBoxAdapter(__classPrivateFieldGet(this, _BoxAdapters_context, "f"), box),
159
166
  visitGrooveShuffleBox: (box) => new GrooveShuffleBoxAdapter(__classPrivateFieldGet(this, _BoxAdapters_context, "f"), box),
167
+ visitLfoModulatorBox: (box) => new LfoModulatorBoxAdapter(__classPrivateFieldGet(this, _BoxAdapters_context, "f"), box),
168
+ visitStepsModulatorBox: (box) => new StepsModulatorBoxAdapter(__classPrivateFieldGet(this, _BoxAdapters_context, "f"), box),
169
+ visitMacroModulatorBox: (box) => new MacroModulatorBoxAdapter(__classPrivateFieldGet(this, _BoxAdapters_context, "f"), box),
170
+ visitRandomModulatorBox: (box) => new RandomModulatorBoxAdapter(__classPrivateFieldGet(this, _BoxAdapters_context, "f"), box),
171
+ visitModulationBox: (box) => new ModulationBoxAdapter(__classPrivateFieldGet(this, _BoxAdapters_context, "f"), box),
160
172
  visitMarkerBox: (box) => new MarkerBoxAdapter(__classPrivateFieldGet(this, _BoxAdapters_context, "f"), box),
161
173
  visitSignatureEventBox: (box) => new SignatureEventBoxAdapter(__classPrivateFieldGet(this, _BoxAdapters_context, "f"), box),
162
174
  visitMIDIOutputDeviceBox: (box) => new MIDIOutputDeviceBoxAdapter(__classPrivateFieldGet(this, _BoxAdapters_context, "f"), box),
@@ -6,13 +6,14 @@ export declare namespace DeviceManualUrls {
6
6
  const Velocity = "manuals/devices/midi/velocity";
7
7
  const Zeitgeist = "manuals/devices/midi/zeitgeist";
8
8
  const Autotune = "manuals/devices/audio/autotune";
9
- const StereoTool = "manuals/devices/audio/stereo-tool";
9
+ const StereoTool = "manuals/devices/audio/stereotool";
10
10
  const Delay = "manuals/devices/audio/delay";
11
+ const Convolver = "manuals/devices/audio/convolver";
11
12
  const DattorroReverb = "manuals/devices/audio/dattorro-reverb";
12
13
  const Maximizer = "manuals/devices/audio/maximizer";
13
14
  const Compressor = "manuals/devices/audio/compressor";
14
15
  const Gate = "manuals/devices/audio/gate";
15
- const Reverb = "manuals/devices/audio/cheap-reverb";
16
+ const Reverb = "manuals/devices/audio/reverb";
16
17
  const Crusher = "manuals/devices/audio/crusher";
17
18
  const Fold = "manuals/devices/audio/fold";
18
19
  const Tidal = "manuals/devices/audio/tidal";
@@ -30,7 +31,7 @@ export declare namespace DeviceManualUrls {
30
31
  const Playfield = "manuals/devices/instruments/playfield";
31
32
  const Vaporisateur = "manuals/devices/instruments/vaporisateur";
32
33
  const Neon = "manuals/devices/instruments/neon";
33
- const MIDIOutput = "manuals/devices/instruments/midi-output";
34
+ const MIDIOutput = "manuals/devices/instruments/midioutput";
34
35
  const Soundfont = "manuals/devices/instruments/soundfont";
35
36
  const FrequencySplit = "manuals/devices/audio/frequency-split";
36
37
  }
@@ -1 +1 @@
1
- {"version":3,"file":"DeviceManualUrls.d.ts","sourceRoot":"","sources":["../src/DeviceManualUrls.ts"],"names":[],"mappings":"AAAA,yBAAiB,gBAAgB,CAAC;IAEvB,MAAM,QAAQ,sBAAsB,CAAA;IAGpC,MAAM,QAAQ,kCAAkC,CAAA;IAChD,MAAM,KAAK,+BAA+B,CAAA;IAC1C,MAAM,SAAS,mCAAmC,CAAA;IAClD,MAAM,QAAQ,kCAAkC,CAAA;IAChD,MAAM,SAAS,mCAAmC,CAAA;IAGlD,MAAM,QAAQ,mCAAmC,CAAA;IACjD,MAAM,UAAU,sCAAsC,CAAA;IACtD,MAAM,KAAK,gCAAgC,CAAA;IAC3C,MAAM,cAAc,0CAA0C,CAAA;IAC9D,MAAM,SAAS,oCAAoC,CAAA;IACnD,MAAM,UAAU,qCAAqC,CAAA;IACrD,MAAM,IAAI,+BAA+B,CAAA;IACzC,MAAM,MAAM,uCAAuC,CAAA;IACnD,MAAM,OAAO,kCAAkC,CAAA;IAC/C,MAAM,IAAI,+BAA+B,CAAA;IACzC,MAAM,KAAK,gCAAgC,CAAA;IAC3C,MAAM,MAAM,iCAAiC,CAAA;IAC7C,MAAM,OAAO,kCAAkC,CAAA;IAC/C,MAAM,SAAS,qCAAqC,CAAA;IACpD,MAAM,OAAO,kCAAkC,CAAA;IAC/C,MAAM,UAAU,qCAAqC,CAAA;IACrD,MAAM,SAAS,oCAAoC,CAAA;IACnD,MAAM,oBAAoB,2CAA2C,CAAA;IACrE,MAAM,eAAe,2CAA2C,CAAA;IAGhE,MAAM,OAAO,wCAAwC,CAAA;IACrD,MAAM,IAAI,qCAAqC,CAAA;IAC/C,MAAM,IAAI,qCAAqC,CAAA;IAC/C,MAAM,SAAS,0CAA0C,CAAA;IACzD,MAAM,YAAY,6CAA6C,CAAA;IAC/D,MAAM,IAAI,qCAAqC,CAAA;IAC/C,MAAM,UAAU,4CAA4C,CAAA;IAC5D,MAAM,SAAS,0CAA0C,CAAA;IACzD,MAAM,cAAc,0CAA0C,CAAA;CACxE"}
1
+ {"version":3,"file":"DeviceManualUrls.d.ts","sourceRoot":"","sources":["../src/DeviceManualUrls.ts"],"names":[],"mappings":"AAAA,yBAAiB,gBAAgB,CAAC;IAEvB,MAAM,QAAQ,sBAAsB,CAAA;IAGpC,MAAM,QAAQ,kCAAkC,CAAA;IAChD,MAAM,KAAK,+BAA+B,CAAA;IAC1C,MAAM,SAAS,mCAAmC,CAAA;IAClD,MAAM,QAAQ,kCAAkC,CAAA;IAChD,MAAM,SAAS,mCAAmC,CAAA;IAGlD,MAAM,QAAQ,mCAAmC,CAAA;IACjD,MAAM,UAAU,qCAAqC,CAAA;IACrD,MAAM,KAAK,gCAAgC,CAAA;IAC3C,MAAM,SAAS,oCAAoC,CAAA;IACnD,MAAM,cAAc,0CAA0C,CAAA;IAC9D,MAAM,SAAS,oCAAoC,CAAA;IACnD,MAAM,UAAU,qCAAqC,CAAA;IACrD,MAAM,IAAI,+BAA+B,CAAA;IACzC,MAAM,MAAM,iCAAiC,CAAA;IAC7C,MAAM,OAAO,kCAAkC,CAAA;IAC/C,MAAM,IAAI,+BAA+B,CAAA;IACzC,MAAM,KAAK,gCAAgC,CAAA;IAC3C,MAAM,MAAM,iCAAiC,CAAA;IAC7C,MAAM,OAAO,kCAAkC,CAAA;IAC/C,MAAM,SAAS,qCAAqC,CAAA;IACpD,MAAM,OAAO,kCAAkC,CAAA;IAC/C,MAAM,UAAU,qCAAqC,CAAA;IACrD,MAAM,SAAS,oCAAoC,CAAA;IACnD,MAAM,oBAAoB,2CAA2C,CAAA;IACrE,MAAM,eAAe,2CAA2C,CAAA;IAGhE,MAAM,OAAO,wCAAwC,CAAA;IACrD,MAAM,IAAI,qCAAqC,CAAA;IAC/C,MAAM,IAAI,qCAAqC,CAAA;IAC/C,MAAM,SAAS,0CAA0C,CAAA;IACzD,MAAM,YAAY,6CAA6C,CAAA;IAC/D,MAAM,IAAI,qCAAqC,CAAA;IAC/C,MAAM,UAAU,2CAA2C,CAAA;IAC3D,MAAM,SAAS,0CAA0C,CAAA;IACzD,MAAM,cAAc,0CAA0C,CAAA;CACxE"}
@@ -10,13 +10,14 @@ export var DeviceManualUrls;
10
10
  DeviceManualUrls.Zeitgeist = "manuals/devices/midi/zeitgeist";
11
11
  // Audio Effects
12
12
  DeviceManualUrls.Autotune = "manuals/devices/audio/autotune";
13
- DeviceManualUrls.StereoTool = "manuals/devices/audio/stereo-tool";
13
+ DeviceManualUrls.StereoTool = "manuals/devices/audio/stereotool";
14
14
  DeviceManualUrls.Delay = "manuals/devices/audio/delay";
15
+ DeviceManualUrls.Convolver = "manuals/devices/audio/convolver";
15
16
  DeviceManualUrls.DattorroReverb = "manuals/devices/audio/dattorro-reverb";
16
17
  DeviceManualUrls.Maximizer = "manuals/devices/audio/maximizer";
17
18
  DeviceManualUrls.Compressor = "manuals/devices/audio/compressor";
18
19
  DeviceManualUrls.Gate = "manuals/devices/audio/gate";
19
- DeviceManualUrls.Reverb = "manuals/devices/audio/cheap-reverb";
20
+ DeviceManualUrls.Reverb = "manuals/devices/audio/reverb";
20
21
  DeviceManualUrls.Crusher = "manuals/devices/audio/crusher";
21
22
  DeviceManualUrls.Fold = "manuals/devices/audio/fold";
22
23
  DeviceManualUrls.Tidal = "manuals/devices/audio/tidal";
@@ -35,7 +36,7 @@ export var DeviceManualUrls;
35
36
  DeviceManualUrls.Playfield = "manuals/devices/instruments/playfield";
36
37
  DeviceManualUrls.Vaporisateur = "manuals/devices/instruments/vaporisateur";
37
38
  DeviceManualUrls.Neon = "manuals/devices/instruments/neon";
38
- DeviceManualUrls.MIDIOutput = "manuals/devices/instruments/midi-output";
39
+ DeviceManualUrls.MIDIOutput = "manuals/devices/instruments/midioutput";
39
40
  DeviceManualUrls.Soundfont = "manuals/devices/instruments/soundfont";
40
41
  DeviceManualUrls.FrequencySplit = "manuals/devices/audio/frequency-split";
41
42
  })(DeviceManualUrls || (DeviceManualUrls = {}));
@@ -1,7 +1,7 @@
1
1
  import { Observer, Option, Subscription, Terminable, unitValue } from "@opendaw/lib-std";
2
2
  import { Address } from "@opendaw/lib-box";
3
3
  import { AutomatableParameterFieldAdapter } from "./AutomatableParameterFieldAdapter";
4
- import { AudioUnitTracks } from "./audio-unit/AudioUnitTracks";
4
+ import { ParameterTracks } from "./timeline/ParameterTracks";
5
5
  export type AutomationMode = "read" | "touch" | "latch";
6
6
  export type ParameterWriteEvent = {
7
7
  adapter: AutomatableParameterFieldAdapter;
@@ -13,14 +13,10 @@ export declare class ParameterFieldAdapters {
13
13
  register(adapter: AutomatableParameterFieldAdapter): Terminable;
14
14
  get(address: Address): AutomatableParameterFieldAdapter;
15
15
  opt(address: Address): Option<AutomatableParameterFieldAdapter>;
16
- registerTracks(address: Address, tracks: AudioUnitTracks): Terminable;
17
- getTracks(address: Address): Option<AudioUnitTracks>;
16
+ registerTracks(address: Address, tracks: ParameterTracks): Terminable;
17
+ getTracks(address: Address): Option<ParameterTracks>;
18
18
  setMode(address: Address, mode: AutomationMode): void;
19
19
  getMode(address: Address): AutomationMode;
20
- touchStart(address: Address): void;
21
- touchEnd(address: Address): void;
22
- isTouched(address: Address): boolean;
23
- subscribeTouchEnd(observer: Observer<Address>): Subscription;
24
20
  subscribeWrites(observer: Observer<ParameterWriteEvent>): Subscription;
25
21
  notifyWrite(adapter: AutomatableParameterFieldAdapter, previousUnitValue: unitValue): void;
26
22
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ParameterFieldAdapters.d.ts","sourceRoot":"","sources":["../src/ParameterFieldAdapters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,QAAQ,EAAE,MAAM,EAAa,YAAY,EAAE,UAAU,EAAE,SAAS,EAAC,MAAM,kBAAkB,CAAA;AAC3G,OAAO,EAAC,OAAO,EAAC,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAC,gCAAgC,EAAC,MAAM,oCAAoC,CAAA;AACnF,OAAO,EAAC,eAAe,EAAC,MAAM,8BAA8B,CAAA;AAE5D,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAA;AAEvD,MAAM,MAAM,mBAAmB,GAAG;IAC9B,OAAO,EAAE,gCAAgC,CAAA;IACzC,iBAAiB,EAAE,SAAS,CAAA;CAC/B,CAAA;AAED,qBAAa,sBAAsB;;;IAiB/B,QAAQ,CAAC,OAAO,EAAE,gCAAgC,GAAG,UAAU;IAK/D,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,gCAAgC;IACvD,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,gCAAgC,CAAC;IAE/D,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe,GAAG,UAAU;IAMrE,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,eAAe,CAAC;IAIpD,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,GAAG,IAAI;IACrD,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,cAAc;IAEzC,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAClC,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAIhC,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO;IACpC,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,YAAY;IAE5D,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,mBAAmB,CAAC,GAAG,YAAY;IAItE,WAAW,CAAC,OAAO,EAAE,gCAAgC,EAAE,iBAAiB,EAAE,SAAS,GAAG,IAAI;CAG7F"}
1
+ {"version":3,"file":"ParameterFieldAdapters.d.ts","sourceRoot":"","sources":["../src/ParameterFieldAdapters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,QAAQ,EAAE,MAAM,EAAa,YAAY,EAAE,UAAU,EAAE,SAAS,EAAC,MAAM,kBAAkB,CAAA;AAC3G,OAAO,EAAC,OAAO,EAAC,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAC,gCAAgC,EAAC,MAAM,oCAAoC,CAAA;AACnF,OAAO,EAAC,eAAe,EAAC,MAAM,4BAA4B,CAAA;AAE1D,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAA;AAEvD,MAAM,MAAM,mBAAmB,GAAG;IAC9B,OAAO,EAAE,gCAAgC,CAAA;IACzC,iBAAiB,EAAE,SAAS,CAAA;CAC/B,CAAA;AAED,qBAAa,sBAAsB;;;IAa/B,QAAQ,CAAC,OAAO,EAAE,gCAAgC,GAAG,UAAU;IAK/D,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,gCAAgC;IACvD,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,gCAAgC,CAAC;IAE/D,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe,GAAG,UAAU;IAMrE,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,eAAe,CAAC;IAIpD,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,GAAG,IAAI;IACrD,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,cAAc;IAEzC,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,mBAAmB,CAAC,GAAG,YAAY;IAItE,WAAW,CAAC,OAAO,EAAE,gCAAgC,EAAE,iBAAiB,EAAE,SAAS,GAAG,IAAI;CAG7F"}
@@ -9,7 +9,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
9
9
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
10
10
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
11
11
  };
12
- var _ParameterFieldAdapters_set, _ParameterFieldAdapters_writeNotifier, _ParameterFieldAdapters_tracksMap, _ParameterFieldAdapters_touchedSet, _ParameterFieldAdapters_touchEndNotifier, _ParameterFieldAdapters_modeMap;
12
+ var _ParameterFieldAdapters_set, _ParameterFieldAdapters_writeNotifier, _ParameterFieldAdapters_tracksMap, _ParameterFieldAdapters_modeMap;
13
13
  import { Notifier, Option } from "@opendaw/lib-std";
14
14
  import { Address } from "@opendaw/lib-box";
15
15
  export class ParameterFieldAdapters {
@@ -17,14 +17,10 @@ export class ParameterFieldAdapters {
17
17
  _ParameterFieldAdapters_set.set(this, void 0);
18
18
  _ParameterFieldAdapters_writeNotifier.set(this, void 0);
19
19
  _ParameterFieldAdapters_tracksMap.set(this, void 0);
20
- _ParameterFieldAdapters_touchedSet.set(this, void 0);
21
- _ParameterFieldAdapters_touchEndNotifier.set(this, void 0);
22
20
  _ParameterFieldAdapters_modeMap.set(this, void 0);
23
21
  __classPrivateFieldSet(this, _ParameterFieldAdapters_set, Address.newSet(adapter => adapter.field.address), "f");
24
22
  __classPrivateFieldSet(this, _ParameterFieldAdapters_writeNotifier, new Notifier(), "f");
25
23
  __classPrivateFieldSet(this, _ParameterFieldAdapters_tracksMap, new Map(), "f");
26
- __classPrivateFieldSet(this, _ParameterFieldAdapters_touchedSet, new Set(), "f");
27
- __classPrivateFieldSet(this, _ParameterFieldAdapters_touchEndNotifier, new Notifier(), "f");
28
24
  __classPrivateFieldSet(this, _ParameterFieldAdapters_modeMap, new Map(), "f");
29
25
  }
30
26
  register(adapter) {
@@ -43,15 +39,6 @@ export class ParameterFieldAdapters {
43
39
  }
44
40
  setMode(address, mode) { __classPrivateFieldGet(this, _ParameterFieldAdapters_modeMap, "f").set(address.toString(), mode); }
45
41
  getMode(address) { return __classPrivateFieldGet(this, _ParameterFieldAdapters_modeMap, "f").get(address.toString()) ?? "read"; }
46
- touchStart(address) { __classPrivateFieldGet(this, _ParameterFieldAdapters_touchedSet, "f").add(address.toString()); }
47
- touchEnd(address) {
48
- const key = address.toString();
49
- if (__classPrivateFieldGet(this, _ParameterFieldAdapters_touchedSet, "f").delete(key)) {
50
- __classPrivateFieldGet(this, _ParameterFieldAdapters_touchEndNotifier, "f").notify(address);
51
- }
52
- }
53
- isTouched(address) { return __classPrivateFieldGet(this, _ParameterFieldAdapters_touchedSet, "f").has(address.toString()); }
54
- subscribeTouchEnd(observer) { return __classPrivateFieldGet(this, _ParameterFieldAdapters_touchEndNotifier, "f").subscribe(observer); }
55
42
  subscribeWrites(observer) {
56
43
  return __classPrivateFieldGet(this, _ParameterFieldAdapters_writeNotifier, "f").subscribe(observer);
57
44
  }
@@ -59,4 +46,4 @@ export class ParameterFieldAdapters {
59
46
  __classPrivateFieldGet(this, _ParameterFieldAdapters_writeNotifier, "f").notify({ adapter, previousUnitValue });
60
47
  }
61
48
  }
62
- _ParameterFieldAdapters_set = new WeakMap(), _ParameterFieldAdapters_writeNotifier = new WeakMap(), _ParameterFieldAdapters_tracksMap = new WeakMap(), _ParameterFieldAdapters_touchedSet = new WeakMap(), _ParameterFieldAdapters_touchEndNotifier = new WeakMap(), _ParameterFieldAdapters_modeMap = new WeakMap();
49
+ _ParameterFieldAdapters_set = new WeakMap(), _ParameterFieldAdapters_writeNotifier = new WeakMap(), _ParameterFieldAdapters_tracksMap = new WeakMap(), _ParameterFieldAdapters_modeMap = new WeakMap();
@@ -0,0 +1,10 @@
1
+ import { Vertex } from "@opendaw/lib-box";
2
+ import { Observer, Option, Subscription } from "@opendaw/lib-std";
3
+ import { BoxAdaptersContext } from "./BoxAdaptersContext";
4
+ import { AudioUnitBoxAdapter } from "./audio-unit/AudioUnitBoxAdapter";
5
+ export declare namespace ParameterOwner {
6
+ const nameOf: (context: BoxAdaptersContext, vertex: Vertex) => Option<string>;
7
+ const catchupAndSubscribeName: (context: BoxAdaptersContext, vertex: Vertex, observer: Observer<string>) => Subscription;
8
+ const audioUnitOf: (context: BoxAdaptersContext, vertex: Vertex) => Option<AudioUnitBoxAdapter>;
9
+ }
10
+ //# sourceMappingURL=ParameterOwner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ParameterOwner.d.ts","sourceRoot":"","sources":["../src/ParameterOwner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,MAAM,EAAC,MAAM,kBAAkB,CAAA;AACzD,OAAO,EAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAa,MAAM,kBAAkB,CAAA;AAG3E,OAAO,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAC,mBAAmB,EAAC,MAAM,kCAAkC,CAAA;AAIpE,yBAAiB,cAAc,CAAC;IAGrB,MAAM,MAAM,GAAI,SAAS,kBAAkB,EAAE,QAAQ,MAAM,KAAG,MAAM,CAAC,MAAM,CAcjF,CAAA;IAIM,MAAM,uBAAuB,GAAI,SAAS,kBAAkB,EAC3B,QAAQ,MAAM,EACd,UAAU,QAAQ,CAAC,MAAM,CAAC,KAAG,YAepE,CAAA;IAEM,MAAM,WAAW,GAAI,SAAS,kBAAkB,EAAE,QAAQ,MAAM,KAAG,MAAM,CAAC,mBAAmB,CAYnG,CAAA;CAyBJ"}
@@ -0,0 +1,77 @@
1
+ import { StringField } from "@opendaw/lib-box";
2
+ import { Option, Terminable } from "@opendaw/lib-std";
3
+ import { Pointers } from "@opendaw/studio-enums";
4
+ import { AudioUnitBox, ModulationBox } from "@opendaw/studio-boxes";
5
+ import { AudioUnitBoxAdapter } from "./audio-unit/AudioUnitBoxAdapter";
6
+ import { ModulationBoxAdapter } from "./modulation/ModulationBoxAdapter";
7
+ import { Devices } from "./DeviceAdapter";
8
+ export var ParameterOwner;
9
+ (function (ParameterOwner) {
10
+ /// A scriptable device's dynamic parameter lives in its own child box, so the walk falls back to the
11
+ /// device that owns it.
12
+ ParameterOwner.nameOf = (context, vertex) => {
13
+ const box = vertex.box;
14
+ if (box instanceof AudioUnitBox) {
15
+ return context.boxAdapters.adapterFor(box, AudioUnitBoxAdapter).input.label;
16
+ }
17
+ if (box instanceof ModulationBox) {
18
+ const adapter = context.boxAdapters.adapterFor(box, ModulationBoxAdapter);
19
+ return Option.wrap(`${adapter.source.label} \u2192 ${adapter.targetOwner.unwrapOrElse("")} ${adapter.target.mapOr(parameter => parameter.name, "")}`.trim());
20
+ }
21
+ const own = labelOf(context, box);
22
+ if (own.nonEmpty()) {
23
+ return own;
24
+ }
25
+ const owner = resolveOwnerDeviceBox(box).flatMap(owner => labelOf(context, owner));
26
+ return owner.nonEmpty() ? owner : Option.wrap(box.name);
27
+ };
28
+ /// The same name as `nameOf`, but following the rename: a view stays in sync when the device (or the
29
+ /// audio unit's instrument) is relabelled.
30
+ ParameterOwner.catchupAndSubscribeName = (context, vertex, observer) => {
31
+ const box = vertex.box;
32
+ if (box instanceof AudioUnitBox) {
33
+ return context.boxAdapters.adapterFor(box, AudioUnitBoxAdapter).input
34
+ .catchupAndSubscribeLabelChange(label => observer(label.unwrapOrElse("")));
35
+ }
36
+ const own = labelFieldOf(context, box);
37
+ const field = own.nonEmpty()
38
+ ? own
39
+ : resolveOwnerDeviceBox(box).flatMap(owner => labelFieldOf(context, owner));
40
+ if (field.isEmpty()) {
41
+ observer(ParameterOwner.nameOf(context, vertex).unwrapOrElse(box.name));
42
+ return Terminable.Empty;
43
+ }
44
+ return field.unwrap().catchupAndSubscribe(field => observer(field.getValue()));
45
+ };
46
+ ParameterOwner.audioUnitOf = (context, vertex) => {
47
+ const box = vertex.box;
48
+ if (box instanceof AudioUnitBox) {
49
+ return Option.wrap(context.boxAdapters.adapterFor(box, AudioUnitBoxAdapter));
50
+ }
51
+ // A modulated DEPTH owns no device of its own, so the walk follows the assignment to what it drives.
52
+ if (box instanceof ModulationBox) {
53
+ return box.target.targetVertex.flatMap(target => ParameterOwner.audioUnitOf(context, target));
54
+ }
55
+ const own = unitOf(context, box);
56
+ if (own.nonEmpty()) {
57
+ return own;
58
+ }
59
+ return resolveOwnerDeviceBox(box).flatMap(owner => unitOf(context, owner));
60
+ };
61
+ const unitOf = (context, box) => context.boxAdapters.optAdapter(box)
62
+ .flatMap(adapter => Devices.isAny(adapter)
63
+ ? Option.wrap(adapter.audioUnitBoxAdapter())
64
+ : Option.None);
65
+ const labelOf = (context, box) => labelFieldOf(context, box).map(field => field.getValue());
66
+ const labelFieldOf = (context, box) => context.boxAdapters.optAdapter(box).flatMap(adapter => "labelField" in adapter && adapter.labelField instanceof StringField
67
+ ? Option.wrap(adapter.labelField)
68
+ : Option.None);
69
+ const resolveOwnerDeviceBox = (box) => {
70
+ for (const [pointer] of box.outgoingEdges()) {
71
+ if (pointer.pointerType === Pointers.Parameter) {
72
+ return pointer.targetVertex.map(vertex => vertex.box);
73
+ }
74
+ }
75
+ return Option.None;
76
+ };
77
+ })(ParameterOwner || (ParameterOwner = {}));
@@ -11,6 +11,7 @@ import { BoxAdaptersContext } from "./BoxAdaptersContext";
11
11
  import { BoxAdapter } from "./BoxAdapter";
12
12
  import { TimelineBoxAdapter } from "./timeline/TimelineBoxAdapter";
13
13
  import { GrooveShuffleBoxAdapter } from "./grooves/GrooveShuffleBoxAdapter";
14
+ import { ModulatorBoxAdapter } from "./modulation/ModulatorBoxAdapter";
14
15
  import { PianoModeAdapter } from "./PianoModeAdapter";
15
16
  import { LabeledAudioOutput, LabeledAudioOutputsOwner } from "./LabeledAudioOutputsOwner";
16
17
  export declare class RootBoxAdapter implements BoxAdapter, LabeledAudioOutputsOwner {
@@ -21,6 +22,7 @@ export declare class RootBoxAdapter implements BoxAdapter, LabeledAudioOutputsOw
21
22
  get box(): RootBox;
22
23
  get audioBusses(): BoxAdapterCollection<AudioBusBoxAdapter>;
23
24
  get audioUnits(): IndexedBoxAdapterCollection<AudioUnitBoxAdapter, Pointers.AudioUnits>;
25
+ get modulators(): IndexedBoxAdapterCollection<ModulatorBoxAdapter, Pointers.ModulatorCollection>;
24
26
  get clips(): ReadonlyArray<AnyClipBoxAdapter>;
25
27
  get groove(): GrooveShuffleBoxAdapter;
26
28
  get timeline(): TimelineBoxAdapter;
@@ -1 +1 @@
1
- {"version":3,"file":"RootBoxAdapter.d.ts","sourceRoot":"","sources":["../src/RootBoxAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAE,OAAO,EAAC,MAAM,uBAAuB,CAAA;AAC5D,OAAO,EAAC,OAAO,EAAC,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAuB,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAC3D,OAAO,EAAC,kBAAkB,EAAC,MAAM,iCAAiC,CAAA;AAClE,OAAO,EAAC,QAAQ,EAAC,MAAM,uBAAuB,CAAA;AAC9C,OAAO,EAAC,2BAA2B,EAAC,MAAM,+BAA+B,CAAA;AACzE,OAAO,EAAC,mBAAmB,EAAC,MAAM,kCAAkC,CAAA;AACpE,OAAO,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAA;AACrD,OAAO,EAAC,oBAAoB,EAAC,MAAM,wBAAwB,CAAA;AAC3D,OAAO,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAA;AACvC,OAAO,EAAC,kBAAkB,EAAC,MAAM,+BAA+B,CAAA;AAChE,OAAO,EAAC,uBAAuB,EAAC,MAAM,mCAAmC,CAAA;AACzE,OAAO,EAAC,gBAAgB,EAAC,MAAM,oBAAoB,CAAA;AACnD,OAAO,EAAC,kBAAkB,EAAE,wBAAwB,EAAC,MAAM,4BAA4B,CAAA;AAEvF,qBAAa,cAAe,YAAW,UAAU,EAAE,wBAAwB;;gBAQ3D,OAAO,EAAE,kBAAkB,EAAE,GAAG,EAAE,OAAO;IAarD,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAgC;IACtD,IAAI,OAAO,IAAI,OAAO,CAA2B;IACjD,IAAI,GAAG,IAAI,OAAO,CAAmB;IACrC,IAAI,WAAW,IAAI,oBAAoB,CAAC,kBAAkB,CAAC,CAA2B;IACtF,IAAI,UAAU,IAAI,2BAA2B,CAAC,mBAAmB,EAAE,QAAQ,CAAC,UAAU,CAAC,CAA0B;IACjH,IAAI,KAAK,IAAI,aAAa,CAAC,iBAAiB,CAAC,CAI5C;IACD,IAAI,MAAM,IAAI,uBAAuB,CAGpC;IACD,IAAI,QAAQ,IAAI,kBAAkB,CAGjC;IACD,IAAI,SAAS,IAAI,gBAAgB,CAAyB;IAC1D,IAAI,OAAO,IAAI,IAAI,CAAgD;IACnE,IAAI,iBAAiB,IAAI,aAAa,CAAC,aAAa,CAAC,CAEpD;IAEC,mBAAmB,IAAI,QAAQ,CAAC,kBAAkB,CAAC;IAUrD,SAAS,IAAI,IAAI;CACpB"}
1
+ {"version":3,"file":"RootBoxAdapter.d.ts","sourceRoot":"","sources":["../src/RootBoxAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,aAAa,EAAE,OAAO,EAAC,MAAM,uBAAuB,CAAA;AAC7E,OAAO,EAAC,OAAO,EAAC,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAuB,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAC3D,OAAO,EAAC,kBAAkB,EAAC,MAAM,iCAAiC,CAAA;AAClE,OAAO,EAAC,QAAQ,EAAC,MAAM,uBAAuB,CAAA;AAC9C,OAAO,EAAC,2BAA2B,EAAC,MAAM,+BAA+B,CAAA;AACzE,OAAO,EAAC,mBAAmB,EAAC,MAAM,kCAAkC,CAAA;AACpE,OAAO,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAA;AACrD,OAAO,EAAC,oBAAoB,EAAC,MAAM,wBAAwB,CAAA;AAC3D,OAAO,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAA;AACvC,OAAO,EAAC,kBAAkB,EAAC,MAAM,+BAA+B,CAAA;AAChE,OAAO,EAAC,uBAAuB,EAAC,MAAM,mCAAmC,CAAA;AACzE,OAAO,EAAwB,mBAAmB,EAAC,MAAM,kCAAkC,CAAA;AAC3F,OAAO,EAAC,gBAAgB,EAAC,MAAM,oBAAoB,CAAA;AACnD,OAAO,EAAC,kBAAkB,EAAE,wBAAwB,EAAC,MAAM,4BAA4B,CAAA;AAEvF,qBAAa,cAAe,YAAW,UAAU,EAAE,wBAAwB;;gBAS3D,OAAO,EAAE,kBAAkB,EAAE,GAAG,EAAE,OAAO;IAgBrD,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAgC;IACtD,IAAI,OAAO,IAAI,OAAO,CAA2B;IACjD,IAAI,GAAG,IAAI,OAAO,CAAmB;IACrC,IAAI,WAAW,IAAI,oBAAoB,CAAC,kBAAkB,CAAC,CAA2B;IACtF,IAAI,UAAU,IAAI,2BAA2B,CAAC,mBAAmB,EAAE,QAAQ,CAAC,UAAU,CAAC,CAA0B;IACjH,IAAI,UAAU,IAAI,2BAA2B,CAAC,mBAAmB,EAAE,QAAQ,CAAC,mBAAmB,CAAC,CAE/F;IACD,IAAI,KAAK,IAAI,aAAa,CAAC,iBAAiB,CAAC,CAI5C;IACD,IAAI,MAAM,IAAI,uBAAuB,CAGpC;IACD,IAAI,QAAQ,IAAI,kBAAkB,CAGjC;IACD,IAAI,SAAS,IAAI,gBAAgB,CAAyB;IAC1D,IAAI,OAAO,IAAI,IAAI,CAAgD;IACnE,IAAI,iBAAiB,IAAI,aAAa,CAAC,aAAa,CAAC,CAEpD;IAEC,mBAAmB,IAAI,QAAQ,CAAC,kBAAkB,CAAC;IAUrD,SAAS,IAAI,IAAI;CACpB"}
@@ -9,7 +9,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
9
9
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
10
10
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
11
11
  };
12
- var _RootBoxAdapter_context, _RootBoxAdapter_box, _RootBoxAdapter_audioUnits, _RootBoxAdapter_audioBusses, _RootBoxAdapter_pianoMode;
12
+ var _RootBoxAdapter_context, _RootBoxAdapter_box, _RootBoxAdapter_audioUnits, _RootBoxAdapter_audioBusses, _RootBoxAdapter_modulators, _RootBoxAdapter_pianoMode;
13
13
  import { MIDIOutputBox } from "@opendaw/studio-boxes";
14
14
  import { asInstanceOf, Option } from "@opendaw/lib-std";
15
15
  import { AudioBusBoxAdapter } from "./audio-unit/AudioBusBoxAdapter";
@@ -19,6 +19,7 @@ import { AudioUnitBoxAdapter } from "./audio-unit/AudioUnitBoxAdapter";
19
19
  import { BoxAdapterCollection } from "./BoxAdapterCollection";
20
20
  import { TimelineBoxAdapter } from "./timeline/TimelineBoxAdapter";
21
21
  import { GrooveShuffleBoxAdapter } from "./grooves/GrooveShuffleBoxAdapter";
22
+ import { isModulatorBoxAdapter } from "./modulation/ModulatorBoxAdapter";
22
23
  import { PianoModeAdapter } from "./PianoModeAdapter";
23
24
  export class RootBoxAdapter {
24
25
  constructor(context, box) {
@@ -26,11 +27,13 @@ export class RootBoxAdapter {
26
27
  _RootBoxAdapter_box.set(this, void 0);
27
28
  _RootBoxAdapter_audioUnits.set(this, void 0);
28
29
  _RootBoxAdapter_audioBusses.set(this, void 0);
30
+ _RootBoxAdapter_modulators.set(this, void 0);
29
31
  _RootBoxAdapter_pianoMode.set(this, void 0);
30
32
  __classPrivateFieldSet(this, _RootBoxAdapter_context, context, "f");
31
33
  __classPrivateFieldSet(this, _RootBoxAdapter_box, box, "f");
32
34
  __classPrivateFieldSet(this, _RootBoxAdapter_audioUnits, IndexedBoxAdapterCollection.create(__classPrivateFieldGet(this, _RootBoxAdapter_box, "f").audioUnits, box => __classPrivateFieldGet(this, _RootBoxAdapter_context, "f").boxAdapters.adapterFor(box, AudioUnitBoxAdapter), Pointers.AudioUnits), "f");
33
35
  __classPrivateFieldSet(this, _RootBoxAdapter_audioBusses, new BoxAdapterCollection(__classPrivateFieldGet(this, _RootBoxAdapter_box, "f").audioBusses.pointerHub, box => __classPrivateFieldGet(this, _RootBoxAdapter_context, "f").boxAdapters.adapterFor(box, AudioBusBoxAdapter), Pointers.AudioBusses), "f");
36
+ __classPrivateFieldSet(this, _RootBoxAdapter_modulators, IndexedBoxAdapterCollection.create(__classPrivateFieldGet(this, _RootBoxAdapter_box, "f").modulators, box => __classPrivateFieldGet(this, _RootBoxAdapter_context, "f").boxAdapters.adapterFor(box, isModulatorBoxAdapter), Pointers.ModulatorCollection), "f");
34
37
  __classPrivateFieldSet(this, _RootBoxAdapter_pianoMode, new PianoModeAdapter(__classPrivateFieldGet(this, _RootBoxAdapter_box, "f").pianoMode), "f");
35
38
  }
36
39
  get uuid() { return __classPrivateFieldGet(this, _RootBoxAdapter_box, "f").address.uuid; }
@@ -38,6 +41,9 @@ export class RootBoxAdapter {
38
41
  get box() { return __classPrivateFieldGet(this, _RootBoxAdapter_box, "f"); }
39
42
  get audioBusses() { return __classPrivateFieldGet(this, _RootBoxAdapter_audioBusses, "f"); }
40
43
  get audioUnits() { return __classPrivateFieldGet(this, _RootBoxAdapter_audioUnits, "f"); }
44
+ get modulators() {
45
+ return __classPrivateFieldGet(this, _RootBoxAdapter_modulators, "f");
46
+ }
41
47
  get clips() {
42
48
  return __classPrivateFieldGet(this, _RootBoxAdapter_audioUnits, "f").adapters()
43
49
  .flatMap(adapter => adapter.tracks.collection.adapters())
@@ -67,4 +73,4 @@ export class RootBoxAdapter {
67
73
  }
68
74
  terminate() { __classPrivateFieldGet(this, _RootBoxAdapter_audioUnits, "f").terminate(); }
69
75
  }
70
- _RootBoxAdapter_context = new WeakMap(), _RootBoxAdapter_box = new WeakMap(), _RootBoxAdapter_audioUnits = new WeakMap(), _RootBoxAdapter_audioBusses = new WeakMap(), _RootBoxAdapter_pianoMode = new WeakMap();
76
+ _RootBoxAdapter_context = new WeakMap(), _RootBoxAdapter_box = new WeakMap(), _RootBoxAdapter_audioUnits = new WeakMap(), _RootBoxAdapter_audioBusses = new WeakMap(), _RootBoxAdapter_modulators = new WeakMap(), _RootBoxAdapter_pianoMode = new WeakMap();