@opendaw/studio-adapters 0.1.1 → 0.1.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 (44) hide show
  1. package/dist/AutomatableParameterFieldAdapter.d.ts.map +1 -1
  2. package/dist/AutomatableParameterFieldAdapter.js +14 -1
  3. package/dist/BoxAdapters.d.ts.map +1 -1
  4. package/dist/BoxAdapters.js +8 -0
  5. package/dist/DeviceAdapter.d.ts +10 -4
  6. package/dist/DeviceAdapter.d.ts.map +1 -1
  7. package/dist/DeviceAdapter.js +19 -5
  8. package/dist/DeviceManualUrls.d.ts +3 -0
  9. package/dist/DeviceManualUrls.d.ts.map +1 -1
  10. package/dist/DeviceManualUrls.js +3 -0
  11. package/dist/IndexedBoxAdapterCollection.d.ts.map +1 -1
  12. package/dist/IndexedBoxAdapterCollection.js +4 -0
  13. package/dist/audio-unit/AudioUnitBoxAdapter.d.ts +5 -4
  14. package/dist/audio-unit/AudioUnitBoxAdapter.d.ts.map +1 -1
  15. package/dist/audio-unit/AudioUnitBoxAdapter.js +11 -4
  16. package/dist/devices/audio-effects/AudioEffectComposite/AudioCompositeAdapter.d.ts +38 -0
  17. package/dist/devices/audio-effects/AudioEffectComposite/AudioCompositeAdapter.d.ts.map +1 -0
  18. package/dist/devices/audio-effects/AudioEffectComposite/AudioCompositeAdapter.js +74 -0
  19. package/dist/devices/audio-effects/AudioEffectComposite/AudioEffectCompositeCellBoxAdapter.d.ts +45 -0
  20. package/dist/devices/audio-effects/AudioEffectComposite/AudioEffectCompositeCellBoxAdapter.d.ts.map +1 -0
  21. package/dist/devices/audio-effects/AudioEffectComposite/AudioEffectCompositeCellBoxAdapter.js +97 -0
  22. package/dist/devices/audio-effects/AudioEffectCompositeBoxAdapter.d.ts +9 -0
  23. package/dist/devices/audio-effects/AudioEffectCompositeBoxAdapter.d.ts.map +1 -0
  24. package/dist/devices/audio-effects/AudioEffectCompositeBoxAdapter.js +11 -0
  25. package/dist/devices/audio-effects/FrequencySplitBoxAdapter.d.ts +16 -0
  26. package/dist/devices/audio-effects/FrequencySplitBoxAdapter.d.ts.map +1 -0
  27. package/dist/devices/audio-effects/FrequencySplitBoxAdapter.js +36 -0
  28. package/dist/devices/audio-effects/StereoCompositeBoxAdapter.d.ts +9 -0
  29. package/dist/devices/audio-effects/StereoCompositeBoxAdapter.d.ts.map +1 -0
  30. package/dist/devices/audio-effects/StereoCompositeBoxAdapter.js +12 -0
  31. package/dist/devices/instruments/Playfield/PlayfieldSampleBoxAdapter.d.ts +5 -4
  32. package/dist/devices/instruments/Playfield/PlayfieldSampleBoxAdapter.d.ts.map +1 -1
  33. package/dist/devices/instruments/Playfield/PlayfieldSampleBoxAdapter.js +6 -4
  34. package/dist/index.d.ts +5 -0
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +5 -0
  37. package/dist/offline-renderer.d.ts +0 -1
  38. package/dist/offline-renderer.d.ts.map +1 -1
  39. package/dist/preset/PresetDecoder.d.ts +3 -1
  40. package/dist/preset/PresetDecoder.d.ts.map +1 -1
  41. package/dist/preset/PresetDecoder.js +12 -9
  42. package/dist/preset/PresetEncoder.d.ts.map +1 -1
  43. package/dist/preset/PresetEncoder.js +10 -4
  44. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"AutomatableParameterFieldAdapter.d.ts","sourceRoot":"","sources":["../src/AutomatableParameterFieldAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAIH,qBAAqB,EAIrB,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,EACZ,MAAM,CAAC,EAAE,SAAS,EAClB,UAAU,CAAC,EAAE,CAAC;IA2D1B,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,CAAoB;IACtC,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,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,EAIH,qBAAqB,EAKrB,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,EACZ,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,CAAoB;IACtC,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,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"}
@@ -10,7 +10,7 @@ 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 _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, Listeners, Notifier, Option, panic, Terminator } from "@opendaw/lib-std";
13
+ import { assert, clamp, isNull, Listeners, Notifier, Option, panic, Terminator } from "@opendaw/lib-std";
14
14
  import { Pointers } from "@opendaw/studio-enums";
15
15
  import { TrackBoxAdapter } from "./timeline/TrackBoxAdapter";
16
16
  const ExternalControlTypes = [
@@ -57,6 +57,19 @@ export class AutomatableParameterFieldAdapter {
57
57
  if (__classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_context, "f").isMainThread) {
58
58
  __classPrivateFieldSet(this, _AutomatableParameterFieldAdapter_automationHandle, Option.wrap(__classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_context, "f").liveStreamReceiver
59
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
+ }
60
73
  if (__classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_controlledValue, "f") === value) {
61
74
  return;
62
75
  }
@@ -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;AA8G5C,OAAO,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAA;AA4BvC,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;CAwE3C"}
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;AAsH5C,OAAO,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAA;AA4BvC,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;CA4E3C"}
@@ -51,6 +51,10 @@ import { NanoDeviceBoxAdapter } from "./devices/instruments/NanoDeviceBoxAdapter
51
51
  import { PlayfieldDeviceBoxAdapter } from "./devices/instruments/PlayfieldDeviceBoxAdapter";
52
52
  import { StereoToolDeviceBoxAdapter } from "./devices/audio-effects/StereoToolDeviceBoxAdapter";
53
53
  import { PlayfieldSampleBoxAdapter } from "./devices/instruments/Playfield/PlayfieldSampleBoxAdapter";
54
+ import { AudioEffectCompositeBoxAdapter } from "./devices/audio-effects/AudioEffectCompositeBoxAdapter";
55
+ import { StereoCompositeBoxAdapter } from "./devices/audio-effects/StereoCompositeBoxAdapter";
56
+ import { FrequencySplitBoxAdapter } from "./devices/audio-effects/FrequencySplitBoxAdapter";
57
+ import { AudioEffectCompositeCellBoxAdapter } from "./devices/audio-effects/AudioEffectComposite/AudioEffectCompositeCellBoxAdapter";
54
58
  import { ZeitgeistDeviceBoxAdapter } from "./devices/midi-effects/ZeitgeistDeviceBoxAdapter";
55
59
  import { GrooveShuffleBoxAdapter } from "./grooves/GrooveShuffleBoxAdapter";
56
60
  import { UnknownAudioEffectDeviceBoxAdapter } from "./devices/audio-effects/UnknownAudioEffectDeviceBoxAdapter";
@@ -169,6 +173,10 @@ _BoxAdapters_context = new WeakMap(), _BoxAdapters_adapters = new WeakMap(), _Bo
169
173
  visitPitchDeviceBox: (box) => new PitchDeviceBoxAdapter(__classPrivateFieldGet(this, _BoxAdapters_context, "f"), box),
170
174
  visitPlayfieldDeviceBox: (box) => new PlayfieldDeviceBoxAdapter(__classPrivateFieldGet(this, _BoxAdapters_context, "f"), box),
171
175
  visitPlayfieldSampleBox: (box) => new PlayfieldSampleBoxAdapter(__classPrivateFieldGet(this, _BoxAdapters_context, "f"), box),
176
+ visitAudioEffectCompositeBox: (box) => new AudioEffectCompositeBoxAdapter(__classPrivateFieldGet(this, _BoxAdapters_context, "f"), box),
177
+ visitAudioEffectCompositeCellBox: (box) => new AudioEffectCompositeCellBoxAdapter(__classPrivateFieldGet(this, _BoxAdapters_context, "f"), box),
178
+ visitStereoCompositeBox: (box) => new StereoCompositeBoxAdapter(__classPrivateFieldGet(this, _BoxAdapters_context, "f"), box),
179
+ visitFrequencySplitBox: (box) => new FrequencySplitBoxAdapter(__classPrivateFieldGet(this, _BoxAdapters_context, "f"), box),
172
180
  visitRevampDeviceBox: (box) => new RevampDeviceBoxAdapter(__classPrivateFieldGet(this, _BoxAdapters_context, "f"), box),
173
181
  visitReverbDeviceBox: (box) => new ReverbDeviceBoxAdapter(__classPrivateFieldGet(this, _BoxAdapters_context, "f"), box),
174
182
  visitRootBox: (box) => new RootBoxAdapter(__classPrivateFieldGet(this, _BoxAdapters_context, "f"), box),
@@ -36,19 +36,25 @@ export interface InstrumentDeviceBoxAdapter extends DeviceBoxAdapter, LabeledAud
36
36
  }
37
37
  export interface DeviceHost extends BoxAdapter, LabeledAudioOutputsOwner {
38
38
  readonly class: "device-host";
39
- get midiEffects(): IndexedBoxAdapterCollection<MidiEffectDeviceAdapter, Pointers.MIDIEffectHost>;
40
- get midiEffectsField(): Field<Pointers.MIDIEffectHost>;
39
+ get midiEffects(): Option<IndexedBoxAdapterCollection<MidiEffectDeviceAdapter, Pointers.MIDIEffectHost>>;
40
+ get midiEffectsField(): Option<Field<Pointers.MIDIEffectHost>>;
41
41
  get inputAdapter(): Option<AudioUnitInputAdapter>;
42
- get audioEffects(): IndexedBoxAdapterCollection<AudioEffectDeviceAdapter, Pointers.AudioEffectHost>;
43
- get audioEffectsField(): Field<Pointers.AudioEffectHost>;
42
+ get audioEffects(): Option<IndexedBoxAdapterCollection<AudioEffectDeviceAdapter, Pointers.AudioEffectHost>>;
43
+ get audioEffectsField(): Option<Field<Pointers.AudioEffectHost>>;
44
44
  get inputField(): Field<Pointers.InstrumentHost | Pointers.AudioOutput>;
45
45
  get tracksField(): Field<Pointers.TrackCollection>;
46
46
  get minimizedField(): BooleanField;
47
47
  get isAudioUnit(): boolean;
48
+ get hostsInstrument(): boolean;
48
49
  get label(): string;
49
50
  deviceHost(): DeviceHost;
50
51
  audioUnitBoxAdapter(): AudioUnitBoxAdapter;
51
52
  }
53
+ export declare namespace DeviceHost {
54
+ const chainOf: (host: DeviceHost, accepts: "audio" | "midi") => Option<IndexedBoxAdapterCollection<EffectDeviceBoxAdapter, EffectPointerType>>;
55
+ const chainFieldOf: (host: DeviceHost, accepts: "audio" | "midi") => Option<Field<EffectPointerType>>;
56
+ const takesEffect: (host: DeviceHost, accepts: "audio" | "midi") => boolean;
57
+ }
52
58
  export interface DeviceBoxAdapter extends BoxAdapter {
53
59
  readonly type: DeviceType;
54
60
  readonly manualUrl: string;
@@ -1 +1 @@
1
- {"version":3,"file":"DeviceAdapter.d.ts","sourceRoot":"","sources":["../src/DeviceAdapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DeviceAdapter.d.ts","sourceRoot":"","sources":["../src/DeviceAdapter.ts"],"names":[],"mappings":"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"}
@@ -15,6 +15,20 @@ export var DeviceAccepts;
15
15
  }
16
16
  };
17
17
  })(DeviceAccepts || (DeviceAccepts = {}));
18
+ export var DeviceHost;
19
+ (function (DeviceHost) {
20
+ // The chain collection a host keeps for effects of `accepts`, or `None` when it hosts no such chain.
21
+ DeviceHost.chainOf = (host, accepts) => accepts === "audio" ? host.audioEffects : host.midiEffects;
22
+ // The chain HOST FIELD an effect of `accepts` attaches to, or `None` when the host takes no such chain.
23
+ DeviceHost.chainFieldOf = (host, accepts) => accepts === "audio" ? host.audioEffectsField : host.midiEffectsField;
24
+ // Whether an effect of `accepts` may be inserted into this host. The host must hold a chain of that kind
25
+ // at all; a MIDI effect additionally requires a note CONSUMER, so an instrument-hosting host must have an
26
+ // instrument that takes notes. A composite entry hosts no instrument — its notes flow on to whatever
27
+ // consumes them downstream — so there the chain's presence alone decides.
28
+ DeviceHost.takesEffect = (host, accepts) => DeviceHost.chainFieldOf(host, accepts).nonEmpty()
29
+ && (accepts === "audio" || !host.hostsInstrument
30
+ || host.inputAdapter.mapOr(input => input.accepts === "midi", false));
31
+ })(DeviceHost || (DeviceHost = {}));
18
32
  export var Devices;
19
33
  (function (Devices) {
20
34
  Devices.isAny = (adapter) => adapter !== null && typeof adapter === "object" && "type" in adapter
@@ -32,11 +46,11 @@ export var Devices;
32
46
  }
33
47
  assert(Arrays.satisfy(devices, (a, b) => a.deviceHost().address.equals(b.deviceHost().address)), "Devices are not connected to the same host");
34
48
  const device = devices[0];
35
- const targets = device.accepts === "audio"
36
- ? device.deviceHost().audioEffects.field().pointerHub.filter(Pointers.AudioEffectHost)
37
- : device.accepts === "midi"
38
- ? device.deviceHost().midiEffects.field().pointerHub.filter(Pointers.MIDIEffectHost)
39
- : panic("unknown type");
49
+ const field = DeviceHost.chainFieldOf(device.deviceHost(), device.accepts)
50
+ .unwrap(`host takes no ${device.accepts} effects`);
51
+ const targets = field.pointerHub.filter(device.accepts === "audio"
52
+ ? Pointers.AudioEffectHost
53
+ : Pointers.MIDIEffectHost);
40
54
  targets.map(({ box }) => DeviceBoxUtils.lookupIndexField(box))
41
55
  .filter(index => devices.some(device => UUID.Comparator(device.uuid, index.address.uuid) !== 0))
42
56
  .sort((a, b) => a.getValue() - b.getValue())
@@ -21,6 +21,8 @@ export declare namespace DeviceManualUrls {
21
21
  const Vocoder = "manuals/devices/audio/vocoder";
22
22
  const Waveshaper = "manuals/devices/audio/waveshaper";
23
23
  const Werkstatt = "manuals/devices/audio/werkstatt";
24
+ const AudioEffectComposite = "manuals/devices/audio/effect-composite";
25
+ const StereoComposite = "manuals/devices/audio/stereo-composite";
24
26
  const Apparat = "manuals/devices/instruments/apparat";
25
27
  const Tape = "manuals/devices/instruments/tape";
26
28
  const Nano = "manuals/devices/instruments/nano";
@@ -28,5 +30,6 @@ export declare namespace DeviceManualUrls {
28
30
  const Vaporisateur = "manuals/devices/instruments/vaporisateur";
29
31
  const MIDIOutput = "manuals/devices/instruments/midi-output";
30
32
  const Soundfont = "manuals/devices/instruments/soundfont";
33
+ const FrequencySplit = "manuals/devices/audio/frequency-split";
31
34
  }
32
35
  //# sourceMappingURL=DeviceManualUrls.d.ts.map
@@ -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,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;IAGnD,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,UAAU,4CAA4C,CAAA;IAC5D,MAAM,SAAS,0CAA0C,CAAA;CACnE"}
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,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,UAAU,4CAA4C,CAAA;IAC5D,MAAM,SAAS,0CAA0C,CAAA;IACzD,MAAM,cAAc,0CAA0C,CAAA;CACxE"}
@@ -25,6 +25,8 @@ export var DeviceManualUrls;
25
25
  DeviceManualUrls.Vocoder = "manuals/devices/audio/vocoder";
26
26
  DeviceManualUrls.Waveshaper = "manuals/devices/audio/waveshaper";
27
27
  DeviceManualUrls.Werkstatt = "manuals/devices/audio/werkstatt";
28
+ DeviceManualUrls.AudioEffectComposite = "manuals/devices/audio/effect-composite";
29
+ DeviceManualUrls.StereoComposite = "manuals/devices/audio/stereo-composite";
28
30
  // Instruments
29
31
  DeviceManualUrls.Apparat = "manuals/devices/instruments/apparat";
30
32
  DeviceManualUrls.Tape = "manuals/devices/instruments/tape";
@@ -33,4 +35,5 @@ export var DeviceManualUrls;
33
35
  DeviceManualUrls.Vaporisateur = "manuals/devices/instruments/vaporisateur";
34
36
  DeviceManualUrls.MIDIOutput = "manuals/devices/instruments/midi-output";
35
37
  DeviceManualUrls.Soundfont = "manuals/devices/instruments/soundfont";
38
+ DeviceManualUrls.FrequencySplit = "manuals/devices/audio/frequency-split";
36
39
  })(DeviceManualUrls || (DeviceManualUrls = {}));
@@ -1 +1 @@
1
- {"version":3,"file":"IndexedBoxAdapterCollection.d.ts","sourceRoot":"","sources":["../src/IndexedBoxAdapterCollection.ts"],"names":[],"mappings":"AAAA,OAAO,EAIH,IAAI,EACJ,GAAG,EAGH,MAAM,EAEN,YAAY,EACZ,UAAU,EACV,IAAI,EACP,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAC,GAAG,EAAE,KAAK,EAAE,UAAU,EAAe,MAAM,kBAAkB,CAAA;AACrE,OAAO,EAAC,QAAQ,EAAC,MAAM,uBAAuB,CAAA;AAC9C,OAAO,EAAC,yBAAyB,EAAC,MAAM,wBAAwB,CAAA;AAEhE,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAA;AAEvC,MAAM,WAAW,iBAAkB,SAAQ,UAAU;IACjD,UAAU,EAAE,UAAU,CAAA;CACzB;AAED,MAAM,WAAW,gCAAgC,CAAC,CAAC,SAAS,iBAAiB,CAAE,SAAQ,yBAAyB,CAAC,CAAC,CAAC;IAC/G,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAA;CAC9B;AAED,qBAAa,2BAA2B,CAAC,CAAC,SAAS,iBAAiB,EAAE,CAAC,SAAS,QAAQ,CAAE,YAAW,UAAU;;IAC3G,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,iBAAiB,EAAE,CAAC,SAAS,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EACf,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EACtB,QAAQ,EAAE,CAAC,GAAG,2BAA2B,CAAC,CAAC,EAAE,CAAC,CAAC;IAW9G,OAAO;IA0BP,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC;IAEjB,SAAS,CAAC,QAAQ,EAAE,gCAAgC,CAAC,CAAC,CAAC,GAAG,YAAY;IAItE,mBAAmB,CAAC,QAAQ,EAAE,gCAAgC,CAAC,CAAC,CAAC,GAAG,YAAY;IAKhF,iBAAiB,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC;IAKxC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC;IAE3C,eAAe,IAAI,GAAG;IAUtB,QAAQ,IAAI,aAAa,CAAC,CAAC,CAAC;IAS5B,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IAIlC,SAAS,CAAC,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IAkB5C,IAAI,IAAI,GAAG;IAEX,OAAO,IAAI,OAAO;IAElB,SAAS,IAAI,IAAI;CAOpB"}
1
+ {"version":3,"file":"IndexedBoxAdapterCollection.d.ts","sourceRoot":"","sources":["../src/IndexedBoxAdapterCollection.ts"],"names":[],"mappings":"AAAA,OAAO,EAIH,IAAI,EACJ,GAAG,EAGH,MAAM,EAEN,YAAY,EACZ,UAAU,EACV,IAAI,EACP,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAC,GAAG,EAAE,KAAK,EAAE,UAAU,EAAe,MAAM,kBAAkB,CAAA;AACrE,OAAO,EAAC,QAAQ,EAAC,MAAM,uBAAuB,CAAA;AAC9C,OAAO,EAAC,yBAAyB,EAAC,MAAM,wBAAwB,CAAA;AAEhE,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAA;AAEvC,MAAM,WAAW,iBAAkB,SAAQ,UAAU;IACjD,UAAU,EAAE,UAAU,CAAA;CACzB;AAED,MAAM,WAAW,gCAAgC,CAAC,CAAC,SAAS,iBAAiB,CAAE,SAAQ,yBAAyB,CAAC,CAAC,CAAC;IAC/G,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAA;CAC9B;AAED,qBAAa,2BAA2B,CAAC,CAAC,SAAS,iBAAiB,EAAE,CAAC,SAAS,QAAQ,CAAE,YAAW,UAAU;;IAC3G,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,iBAAiB,EAAE,CAAC,SAAS,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EACf,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EACtB,QAAQ,EAAE,CAAC,GAAG,2BAA2B,CAAC,CAAC,EAAE,CAAC,CAAC;IAW9G,OAAO;IA0BP,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC;IAEjB,SAAS,CAAC,QAAQ,EAAE,gCAAgC,CAAC,CAAC,CAAC,GAAG,YAAY;IAItE,mBAAmB,CAAC,QAAQ,EAAE,gCAAgC,CAAC,CAAC,CAAC,GAAG,YAAY;IAKhF,iBAAiB,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC;IAKxC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC;IAE3C,eAAe,IAAI,GAAG;IAUtB,QAAQ,IAAI,aAAa,CAAC,CAAC,CAAC;IAa5B,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IAIlC,SAAS,CAAC,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IAkB5C,IAAI,IAAI,GAAG;IAEX,OAAO,IAAI,OAAO;IAElB,SAAS,IAAI,IAAI;CAOpB"}
@@ -70,8 +70,12 @@ export class IndexedBoxAdapterCollection {
70
70
  }
71
71
  adapters() {
72
72
  if (__classPrivateFieldGet(this, _IndexedBoxAdapterCollection_sorted, "f") === null) {
73
+ // Exclude a box being deleted: within the transaction its `delete()` detaches it (isAttached false)
74
+ // BEFORE the field pointer removal reaches `onRemoved`, so it lingers here as a zombie. A reindex of
75
+ // its survivors would otherwise re-render it and resolve its now-dangling mandatory pointers.
73
76
  __classPrivateFieldSet(this, _IndexedBoxAdapterCollection_sorted, __classPrivateFieldGet(this, _IndexedBoxAdapterCollection_entries, "f").values()
74
77
  .map(({ adapter }) => adapter)
78
+ .filter(adapter => adapter.box.isAttached())
75
79
  .sort((a, b) => a.indexField.getValue() - b.indexField.getValue()), "f");
76
80
  }
77
81
  return __classPrivateFieldGet(this, _IndexedBoxAdapterCollection_sorted, "f");
@@ -32,20 +32,21 @@ export declare class AudioUnitBoxAdapter implements DeviceHost, BoxAdapter {
32
32
  get captureBox(): Option<CaptureAudioBox | CaptureMidiBox>;
33
33
  get tracks(): AudioUnitTracks;
34
34
  get input(): AudioUnitInput;
35
- get midiEffects(): IndexedBoxAdapterCollection<MidiEffectDeviceAdapter, Pointers.MIDIEffectHost>;
36
- get audioEffects(): IndexedBoxAdapterCollection<AudioEffectDeviceAdapter, Pointers.AudioEffectHost>;
35
+ get midiEffects(): Option<IndexedBoxAdapterCollection<MidiEffectDeviceAdapter, Pointers.MIDIEffectHost>>;
36
+ get audioEffects(): Option<IndexedBoxAdapterCollection<AudioEffectDeviceAdapter, Pointers.AudioEffectHost>>;
37
37
  get inputAdapter(): Option<AudioUnitInputAdapter>;
38
38
  get auxSends(): IndexedBoxAdapterCollection<AuxSendBoxAdapter, Pointers.AuxSend>;
39
39
  get output(): AudioUnitOutput;
40
40
  get isBus(): boolean;
41
41
  get isInstrument(): boolean;
42
42
  get isOutput(): boolean;
43
- get midiEffectsField(): Field<Pointers.MIDIEffectHost>;
43
+ get midiEffectsField(): Option<Field<Pointers.MIDIEffectHost>>;
44
44
  get inputField(): Field<Pointers.InstrumentHost | Pointers.AudioOutput>;
45
- get audioEffectsField(): Field<Pointers.AudioEffectHost>;
45
+ get audioEffectsField(): Option<Field<Pointers.AudioEffectHost>>;
46
46
  get tracksField(): Field<Pointers.TrackCollection>;
47
47
  get minimizedField(): BooleanField;
48
48
  get isAudioUnit(): boolean;
49
+ get hostsInstrument(): boolean;
49
50
  get label(): string;
50
51
  deviceHost(): DeviceHost;
51
52
  audioUnitBoxAdapter(): AudioUnitBoxAdapter;
@@ -1 +1 @@
1
- {"version":3,"file":"AudioUnitBoxAdapter.d.ts","sourceRoot":"","sources":["../../src/audio-unit/AudioUnitBoxAdapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AudioUnitBoxAdapter.d.ts","sourceRoot":"","sources":["../../src/audio-unit/AudioUnitBoxAdapter.ts"],"names":[],"mappings":"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"}
@@ -53,8 +53,14 @@ export class AudioUnitBoxAdapter {
53
53
  get captureBox() { return __classPrivateFieldGet(this, _AudioUnitBoxAdapter_box, "f").capture.targetVertex; }
54
54
  get tracks() { return __classPrivateFieldGet(this, _AudioUnitBoxAdapter_tracks, "f"); }
55
55
  get input() { return __classPrivateFieldGet(this, _AudioUnitBoxAdapter_input, "f"); }
56
- get midiEffects() { return __classPrivateFieldGet(this, _AudioUnitBoxAdapter_midiEffects, "f"); }
57
- get audioEffects() { return __classPrivateFieldGet(this, _AudioUnitBoxAdapter_audioEffects, "f"); }
56
+ // An audio unit hosts BOTH chain kinds, so these are always present (a one-sided host, e.g. a composite
57
+ // entry, returns `None` for the kind it does not host — see `DeviceHost`).
58
+ get midiEffects() {
59
+ return Option.wrap(__classPrivateFieldGet(this, _AudioUnitBoxAdapter_midiEffects, "f"));
60
+ }
61
+ get audioEffects() {
62
+ return Option.wrap(__classPrivateFieldGet(this, _AudioUnitBoxAdapter_audioEffects, "f"));
63
+ }
58
64
  get inputAdapter() { return __classPrivateFieldGet(this, _AudioUnitBoxAdapter_input, "f").adapter(); }
59
65
  get auxSends() { return __classPrivateFieldGet(this, _AudioUnitBoxAdapter_auxSends, "f"); }
60
66
  get output() { return __classPrivateFieldGet(this, _AudioUnitBoxAdapter_output, "f"); }
@@ -63,12 +69,13 @@ export class AudioUnitBoxAdapter {
63
69
  get isOutput() {
64
70
  return __classPrivateFieldGet(this, _AudioUnitBoxAdapter_box, "f").output.targetVertex.mapOr(output => output.box.address.equals(__classPrivateFieldGet(this, _AudioUnitBoxAdapter_context, "f").rootBoxAdapter.address), false);
65
71
  }
66
- get midiEffectsField() { return __classPrivateFieldGet(this, _AudioUnitBoxAdapter_box, "f").midiEffects; }
72
+ get midiEffectsField() { return Option.wrap(__classPrivateFieldGet(this, _AudioUnitBoxAdapter_box, "f").midiEffects); }
67
73
  get inputField() { return __classPrivateFieldGet(this, _AudioUnitBoxAdapter_box, "f").input; }
68
- get audioEffectsField() { return __classPrivateFieldGet(this, _AudioUnitBoxAdapter_box, "f").audioEffects; }
74
+ get audioEffectsField() { return Option.wrap(__classPrivateFieldGet(this, _AudioUnitBoxAdapter_box, "f").audioEffects); }
69
75
  get tracksField() { return __classPrivateFieldGet(this, _AudioUnitBoxAdapter_box, "f").tracks; }
70
76
  get minimizedField() { return __classPrivateFieldGet(this, _AudioUnitBoxAdapter_input, "f").adapter().unwrap("input.adapter").minimizedField; }
71
77
  get isAudioUnit() { return true; }
78
+ get hostsInstrument() { return true; }
72
79
  get label() { return __classPrivateFieldGet(this, _AudioUnitBoxAdapter_input, "f").adapter().mapOr(input => input.labelField.getValue(), ""); }
73
80
  deviceHost() { return this; }
74
81
  audioUnitBoxAdapter() { return this; }
@@ -0,0 +1,38 @@
1
+ import { UUID } from "@opendaw/lib-std";
2
+ import { Address, BooleanField, Field, Int32Field, PointerField, StringField } from "@opendaw/lib-box";
3
+ import { AudioEffectCompositeBox, FrequencySplitBox, StereoCompositeBox } from "@opendaw/studio-boxes";
4
+ import { Pointers } from "@opendaw/studio-enums";
5
+ import { AudioEffectDeviceAdapter, DeviceHost } from "../../../DeviceAdapter";
6
+ import { LabeledAudioOutput } from "../../../LabeledAudioOutputsOwner";
7
+ import { BoxAdaptersContext } from "../../../BoxAdaptersContext";
8
+ import { IndexedBoxAdapterCollection } from "../../../IndexedBoxAdapterCollection";
9
+ import { AudioUnitBoxAdapter } from "../../../audio-unit/AudioUnitBoxAdapter";
10
+ import { AudioEffectCompositeCellBoxAdapter } from "./AudioEffectCompositeCellBoxAdapter";
11
+ export type AudioCompositeBox = AudioEffectCompositeBox | StereoCompositeBox | FrequencySplitBox;
12
+ export declare abstract class AudioCompositeAdapter implements AudioEffectDeviceAdapter {
13
+ #private;
14
+ readonly type = "audio-effect";
15
+ readonly accepts = "audio";
16
+ abstract get entriesFixed(): boolean;
17
+ abstract get manualUrl(): string;
18
+ readonly namedParameter: {
19
+ readonly dry: import("../../..").AutomatableParameterFieldAdapter<number>;
20
+ readonly wet: import("../../..").AutomatableParameterFieldAdapter<number>;
21
+ };
22
+ protected constructor(context: BoxAdaptersContext, box: AudioCompositeBox);
23
+ get box(): AudioCompositeBox;
24
+ get uuid(): UUID.Bytes;
25
+ get address(): Address;
26
+ get indexField(): Int32Field;
27
+ get labelField(): StringField;
28
+ get enabledField(): BooleanField;
29
+ get minimizedField(): BooleanField;
30
+ get host(): PointerField<Pointers.AudioEffectHost>;
31
+ get entries(): IndexedBoxAdapterCollection<AudioEffectCompositeCellBoxAdapter, Pointers.AudioEffectCompositeCell>;
32
+ get inputField(): Field<Pointers.SideChain>;
33
+ deviceHost(): DeviceHost;
34
+ audioUnitBoxAdapter(): AudioUnitBoxAdapter;
35
+ labeledAudioOutputs(): Iterable<LabeledAudioOutput>;
36
+ terminate(): void;
37
+ }
38
+ //# sourceMappingURL=AudioCompositeAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AudioCompositeAdapter.d.ts","sourceRoot":"","sources":["../../../../src/devices/audio-effects/AudioEffectComposite/AudioCompositeAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,IAAI,EAAe,MAAM,kBAAkB,CAAA;AACtF,OAAO,EAAC,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAC,MAAM,kBAAkB,CAAA;AACpG,OAAO,EAAC,uBAAuB,EAAE,iBAAiB,EAAE,kBAAkB,EAAC,MAAM,uBAAuB,CAAA;AACpG,OAAO,EAAC,QAAQ,EAAC,MAAM,uBAAuB,CAAA;AAC9C,OAAO,EAAC,wBAAwB,EAAE,UAAU,EAAU,MAAM,wBAAwB,CAAA;AACpF,OAAO,EAAC,kBAAkB,EAAC,MAAM,mCAAmC,CAAA;AACpE,OAAO,EAAC,kBAAkB,EAAC,MAAM,6BAA6B,CAAA;AAC9D,OAAO,EAAC,2BAA2B,EAAC,MAAM,sCAAsC,CAAA;AAEhF,OAAO,EAAC,mBAAmB,EAAC,MAAM,yCAAyC,CAAA;AAC3E,OAAO,EAAC,kCAAkC,EAAC,MAAM,sCAAsC,CAAA;AAKvF,MAAM,MAAM,iBAAiB,GAAG,uBAAuB,GAAG,kBAAkB,GAAG,iBAAiB,CAAA;AAIhG,8BAAsB,qBAAsB,YAAW,wBAAwB;;IAC3E,QAAQ,CAAC,IAAI,kBAAiB;IAC9B,QAAQ,CAAC,OAAO,WAAU;IAI1B,QAAQ,KAAK,YAAY,IAAI,OAAO,CAAA;IACpC,QAAQ,KAAK,SAAS,IAAI,MAAM,CAAA;IAUhC,QAAQ,CAAC,cAAc;;;MAAA;IAEvB,SAAS,aAAa,OAAO,EAAE,kBAAkB,EAAE,GAAG,EAAE,iBAAiB;IAUzE,IAAI,GAAG,IAAI,iBAAiB,CAAmB;IAC/C,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAgC;IACtD,IAAI,OAAO,IAAI,OAAO,CAA2B;IACjD,IAAI,UAAU,IAAI,UAAU,CAAyB;IACrD,IAAI,UAAU,IAAI,WAAW,CAAyB;IACtD,IAAI,YAAY,IAAI,YAAY,CAA2B;IAC3D,IAAI,cAAc,IAAI,YAAY,CAA6B;IAC/D,IAAI,IAAI,IAAI,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAwB;IAE1E,IAAI,OAAO,IAAI,2BAA2B,CAAC,kCAAkC,EAAE,QAAQ,CAAC,wBAAwB,CAAC,CAEhH;IAID,IAAI,UAAU,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAyB;IAEpE,UAAU,IAAI,UAAU;IAKxB,mBAAmB,IAAI,mBAAmB;IAExC,mBAAmB,IAAI,QAAQ,CAAC,kBAAkB,CAAC;IAYrD,SAAS,IAAI,IAAI;CAUpB"}
@@ -0,0 +1,74 @@
1
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
2
+ if (kind === "m") throw new TypeError("Private method is not writable");
3
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
4
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
5
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
6
+ };
7
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
8
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
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
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
11
+ };
12
+ var _AudioCompositeAdapter_instances, _AudioCompositeAdapter_terminator, _AudioCompositeAdapter_context, _AudioCompositeAdapter_box, _AudioCompositeAdapter_entries, _AudioCompositeAdapter_parametric, _AudioCompositeAdapter_wrapParameters;
13
+ import { Option, StringMapping, Terminator, ValueMapping } from "@opendaw/lib-std";
14
+ import { Pointers } from "@opendaw/studio-enums";
15
+ import { Devices } from "../../../DeviceAdapter";
16
+ import { IndexedBoxAdapterCollection } from "../../../IndexedBoxAdapterCollection";
17
+ import { ParameterAdapterSet } from "../../../ParameterAdapterSet";
18
+ import { AudioEffectCompositeCellBoxAdapter } from "./AudioEffectCompositeCellBoxAdapter";
19
+ // A parallel audio composite: hosts AudioEffectCompositeCellBox ENTRIES, each its own audio-fx chain, mixed through
20
+ // their own gain / mute / solo into the wet sum, and blended with the dry input by `dry` / `wet`.
21
+ export class AudioCompositeAdapter {
22
+ constructor(context, box) {
23
+ _AudioCompositeAdapter_instances.add(this);
24
+ this.type = "audio-effect";
25
+ this.accepts = "audio";
26
+ _AudioCompositeAdapter_terminator.set(this, new Terminator());
27
+ _AudioCompositeAdapter_context.set(this, void 0);
28
+ _AudioCompositeAdapter_box.set(this, void 0);
29
+ _AudioCompositeAdapter_entries.set(this, void 0);
30
+ _AudioCompositeAdapter_parametric.set(this, void 0);
31
+ __classPrivateFieldSet(this, _AudioCompositeAdapter_context, context, "f");
32
+ __classPrivateFieldSet(this, _AudioCompositeAdapter_box, box, "f");
33
+ __classPrivateFieldSet(this, _AudioCompositeAdapter_entries, __classPrivateFieldGet(this, _AudioCompositeAdapter_terminator, "f").own(IndexedBoxAdapterCollection.create(__classPrivateFieldGet(this, _AudioCompositeAdapter_box, "f").entries, box => __classPrivateFieldGet(this, _AudioCompositeAdapter_context, "f").boxAdapters.adapterFor(box, AudioEffectCompositeCellBoxAdapter), Pointers.AudioEffectCompositeCell)), "f");
34
+ __classPrivateFieldSet(this, _AudioCompositeAdapter_parametric, __classPrivateFieldGet(this, _AudioCompositeAdapter_terminator, "f").own(new ParameterAdapterSet(__classPrivateFieldGet(this, _AudioCompositeAdapter_context, "f"))), "f");
35
+ this.namedParameter = __classPrivateFieldGet(this, _AudioCompositeAdapter_instances, "m", _AudioCompositeAdapter_wrapParameters).call(this, box);
36
+ }
37
+ get box() { return __classPrivateFieldGet(this, _AudioCompositeAdapter_box, "f"); }
38
+ get uuid() { return __classPrivateFieldGet(this, _AudioCompositeAdapter_box, "f").address.uuid; }
39
+ get address() { return __classPrivateFieldGet(this, _AudioCompositeAdapter_box, "f").address; }
40
+ get indexField() { return __classPrivateFieldGet(this, _AudioCompositeAdapter_box, "f").index; }
41
+ get labelField() { return __classPrivateFieldGet(this, _AudioCompositeAdapter_box, "f").label; }
42
+ get enabledField() { return __classPrivateFieldGet(this, _AudioCompositeAdapter_box, "f").enabled; }
43
+ get minimizedField() { return __classPrivateFieldGet(this, _AudioCompositeAdapter_box, "f").minimized; }
44
+ get host() { return __classPrivateFieldGet(this, _AudioCompositeAdapter_box, "f").host; }
45
+ get entries() {
46
+ return __classPrivateFieldGet(this, _AudioCompositeAdapter_entries, "f");
47
+ }
48
+ // The composite's INPUT TAP: the address a device nested inside this composite points its sidechain at to
49
+ // detect the signal ENTERING the composite (see AudioEffectCompositeBox field 11).
50
+ get inputField() { return __classPrivateFieldGet(this, _AudioCompositeAdapter_box, "f").input; }
51
+ deviceHost() {
52
+ return __classPrivateFieldGet(this, _AudioCompositeAdapter_context, "f").boxAdapters
53
+ .adapterFor(__classPrivateFieldGet(this, _AudioCompositeAdapter_box, "f").host.targetVertex.unwrap("no device-host").box, Devices.isHost);
54
+ }
55
+ audioUnitBoxAdapter() { return this.deviceHost().audioUnitBoxAdapter(); }
56
+ *labeledAudioOutputs() {
57
+ // Only the composite's MIXED output is a public sidechain source. Its ENTRIES are internal — surfacing
58
+ // them cluttered every sidechain picker with blank rows, and a device outside the composite has no
59
+ // reason to tap one branch. (The composite's INPUT is offered separately, and only to the devices
60
+ // INSIDE it — see SidechainButton.)
61
+ yield {
62
+ address: this.address,
63
+ label: this.labelField.getValue(),
64
+ children: () => Option.None
65
+ };
66
+ }
67
+ terminate() { __classPrivateFieldGet(this, _AudioCompositeAdapter_terminator, "f").terminate(); }
68
+ }
69
+ _AudioCompositeAdapter_terminator = new WeakMap(), _AudioCompositeAdapter_context = new WeakMap(), _AudioCompositeAdapter_box = new WeakMap(), _AudioCompositeAdapter_entries = new WeakMap(), _AudioCompositeAdapter_parametric = new WeakMap(), _AudioCompositeAdapter_instances = new WeakSet(), _AudioCompositeAdapter_wrapParameters = function _AudioCompositeAdapter_wrapParameters(box) {
70
+ return {
71
+ dry: __classPrivateFieldGet(this, _AudioCompositeAdapter_parametric, "f").createParameter(box.dry, ValueMapping.DefaultDecibel, StringMapping.numeric({ unit: "dB", fractionDigits: 1 }), "Dry"),
72
+ wet: __classPrivateFieldGet(this, _AudioCompositeAdapter_parametric, "f").createParameter(box.wet, ValueMapping.DefaultDecibel, StringMapping.numeric({ unit: "dB", fractionDigits: 1 }), "Wet")
73
+ };
74
+ };
@@ -0,0 +1,45 @@
1
+ import { Pointers } from "@opendaw/studio-enums";
2
+ import { AudioEffectCompositeCellBox } from "@opendaw/studio-boxes";
3
+ import { int, Option, UUID } from "@opendaw/lib-std";
4
+ import { Address, BooleanField, Field, Int32Field, StringField } from "@opendaw/lib-box";
5
+ import { AudioEffectDeviceAdapter, DeviceHost, MidiEffectDeviceAdapter } from "../../../DeviceAdapter";
6
+ import { LabeledAudioOutput } from "../../../LabeledAudioOutputsOwner";
7
+ import { IndexedBoxAdapter, IndexedBoxAdapterCollection } from "../../../IndexedBoxAdapterCollection";
8
+ import { BoxAdaptersContext } from "../../../BoxAdaptersContext";
9
+ import { AudioUnitInputAdapter } from "../../../audio-unit/AudioUnitInputAdapter";
10
+ import { AudioUnitBoxAdapter } from "../../../audio-unit/AudioUnitBoxAdapter";
11
+ import { AudioCompositeAdapter } from "./AudioCompositeAdapter";
12
+ export declare class AudioEffectCompositeCellBoxAdapter implements DeviceHost, IndexedBoxAdapter {
13
+ #private;
14
+ readonly class = "device-host";
15
+ readonly namedParameter: {
16
+ readonly gain: import("../../..").AutomatableParameterFieldAdapter<number>;
17
+ readonly pan: import("../../..").AutomatableParameterFieldAdapter<number>;
18
+ readonly mute: import("../../..").AutomatableParameterFieldAdapter<boolean>;
19
+ readonly solo: import("../../..").AutomatableParameterFieldAdapter<boolean>;
20
+ };
21
+ constructor(context: BoxAdaptersContext, box: AudioEffectCompositeCellBox);
22
+ get box(): AudioEffectCompositeCellBox;
23
+ get uuid(): UUID.Bytes;
24
+ get address(): Address;
25
+ get indexField(): Int32Field;
26
+ get labelField(): StringField;
27
+ get minimizedField(): BooleanField;
28
+ get label(): string;
29
+ get audioEffects(): Option<IndexedBoxAdapterCollection<AudioEffectDeviceAdapter, Pointers.AudioEffectHost>>;
30
+ get midiEffects(): Option<IndexedBoxAdapterCollection<MidiEffectDeviceAdapter, Pointers.MIDIEffectHost>>;
31
+ get audioEffectsField(): Option<Field<Pointers.AudioEffectHost>>;
32
+ get midiEffectsField(): Option<Field<Pointers.MIDIEffectHost>>;
33
+ get inputAdapter(): Option<AudioUnitInputAdapter>;
34
+ get hostsInstrument(): boolean;
35
+ get isAudioUnit(): boolean;
36
+ get inputField(): Field<Pointers.InstrumentHost | Pointers.AudioOutput>;
37
+ get tracksField(): Field<Pointers.TrackCollection>;
38
+ compositeDevice(): AudioCompositeAdapter;
39
+ deviceHost(): DeviceHost;
40
+ audioUnitBoxAdapter(): AudioUnitBoxAdapter;
41
+ labeledAudioOutputs(): Iterable<LabeledAudioOutput>;
42
+ terminate(): void;
43
+ copyToIndex(index: int): void;
44
+ }
45
+ //# sourceMappingURL=AudioEffectCompositeCellBoxAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AudioEffectCompositeCellBoxAdapter.d.ts","sourceRoot":"","sources":["../../../../src/devices/audio-effects/AudioEffectComposite/AudioEffectCompositeCellBoxAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,uBAAuB,CAAA;AAC9C,OAAO,EAAC,2BAA2B,EAAC,MAAM,uBAAuB,CAAA;AACjE,OAAO,EAAC,GAAG,EAAE,MAAM,EAA6B,IAAI,EAAe,MAAM,kBAAkB,CAAA;AAC3F,OAAO,EAAC,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAC,MAAM,kBAAkB,CAAA;AACtF,OAAO,EACH,wBAAwB,EACxB,UAAU,EAEV,uBAAuB,EAC1B,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAC,kBAAkB,EAAC,MAAM,mCAAmC,CAAA;AACpE,OAAO,EAAC,iBAAiB,EAAE,2BAA2B,EAAC,MAAM,sCAAsC,CAAA;AACnG,OAAO,EAAC,kBAAkB,EAAC,MAAM,6BAA6B,CAAA;AAE9D,OAAO,EAAC,qBAAqB,EAAC,MAAM,2CAA2C,CAAA;AAC/E,OAAO,EAAC,mBAAmB,EAAC,MAAM,yCAAyC,CAAA;AAC3E,OAAO,EAAC,qBAAqB,EAAC,MAAM,yBAAyB,CAAA;AAM7D,qBAAa,kCAAmC,YAAW,UAAU,EAAE,iBAAiB;;IACpF,QAAQ,CAAC,KAAK,iBAAgB;IAU9B,QAAQ,CAAC,cAAc;;;;;MAAA;gBAEX,OAAO,EAAE,kBAAkB,EAAE,GAAG,EAAE,2BAA2B;IASzE,IAAI,GAAG,IAAI,2BAA2B,CAAmB;IACzD,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAgC;IACtD,IAAI,OAAO,IAAI,OAAO,CAA2B;IACjD,IAAI,UAAU,IAAI,UAAU,CAAyB;IACrD,IAAI,UAAU,IAAI,WAAW,CAAyB;IACtD,IAAI,cAAc,IAAI,YAAY,CAA6B;IAC/D,IAAI,KAAK,IAAI,MAAM,CAAoC;IAGvD,IAAI,YAAY,IAAI,MAAM,CAAC,2BAA2B,CAAC,wBAAwB,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,CAE1G;IACD,IAAI,WAAW,IAAI,MAAM,CAAC,2BAA2B,CAAC,uBAAuB,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC,CAEvG;IACD,IAAI,iBAAiB,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAA6C;IAC7G,IAAI,gBAAgB,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAqB;IACnF,IAAI,YAAY,IAAI,MAAM,CAAC,qBAAqB,CAAC,CAAqB;IACtE,IAAI,eAAe,IAAI,OAAO,CAAe;IAC7C,IAAI,WAAW,IAAI,OAAO,CAAe;IAEzC,IAAI,UAAU,IAAI,KAAK,CAAC,QAAQ,CAAC,cAAc,GAAG,QAAQ,CAAC,WAAW,CAAC,CAEtE;IACD,IAAI,WAAW,IAAI,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC,CAA+C;IAGjG,eAAe,IAAI,qBAAqB;IAOxC,UAAU,IAAI,UAAU;IACxB,mBAAmB,IAAI,mBAAmB;IAExC,mBAAmB,IAAI,QAAQ,CAAC,kBAAkB,CAAC;IAOrD,SAAS,IAAI,IAAI;IAEjB,WAAW,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI;CAqBhC"}
@@ -0,0 +1,97 @@
1
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
2
+ if (kind === "m") throw new TypeError("Private method is not writable");
3
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
4
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
5
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
6
+ };
7
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
8
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
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
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
11
+ };
12
+ var _AudioEffectCompositeCellBoxAdapter_instances, _AudioEffectCompositeCellBoxAdapter_terminator, _AudioEffectCompositeCellBoxAdapter_context, _AudioEffectCompositeCellBoxAdapter_box, _AudioEffectCompositeCellBoxAdapter_audioEffects, _AudioEffectCompositeCellBoxAdapter_parametric, _AudioEffectCompositeCellBoxAdapter_wrapParameters;
13
+ import { Pointers } from "@opendaw/studio-enums";
14
+ import { AudioEffectCompositeCellBox } from "@opendaw/studio-boxes";
15
+ import { Option, StringMapping, Terminator, UUID, ValueMapping } from "@opendaw/lib-std";
16
+ import { Devices } from "../../../DeviceAdapter";
17
+ import { IndexedBoxAdapterCollection } from "../../../IndexedBoxAdapterCollection";
18
+ import { ParameterAdapterSet } from "../../../ParameterAdapterSet";
19
+ import { AudioCompositeAdapter } from "./AudioCompositeAdapter";
20
+ // One ENTRY of an AudioEffectCompositeBox: a ONE-SIDED DeviceHost. It hosts an audio-fx chain and NO midi chain
21
+ // (`midiEffects` / `midiEffectsField` are `None`), and no instrument — the composite hands it a signal. Being a
22
+ // DeviceHost is what lets the device panel be ENTERED on this cell (userEditingManager.audioUnit.edit(cellBox)),
23
+ // exactly as a Playfield slot is entered.
24
+ export class AudioEffectCompositeCellBoxAdapter {
25
+ constructor(context, box) {
26
+ _AudioEffectCompositeCellBoxAdapter_instances.add(this);
27
+ this.class = "device-host";
28
+ _AudioEffectCompositeCellBoxAdapter_terminator.set(this, new Terminator());
29
+ _AudioEffectCompositeCellBoxAdapter_context.set(this, void 0);
30
+ _AudioEffectCompositeCellBoxAdapter_box.set(this, void 0);
31
+ _AudioEffectCompositeCellBoxAdapter_audioEffects.set(this, void 0);
32
+ _AudioEffectCompositeCellBoxAdapter_parametric.set(this, void 0);
33
+ __classPrivateFieldSet(this, _AudioEffectCompositeCellBoxAdapter_context, context, "f");
34
+ __classPrivateFieldSet(this, _AudioEffectCompositeCellBoxAdapter_box, box, "f");
35
+ __classPrivateFieldSet(this, _AudioEffectCompositeCellBoxAdapter_audioEffects, __classPrivateFieldGet(this, _AudioEffectCompositeCellBoxAdapter_terminator, "f").own(IndexedBoxAdapterCollection.create(__classPrivateFieldGet(this, _AudioEffectCompositeCellBoxAdapter_box, "f").audioEffects, box => __classPrivateFieldGet(this, _AudioEffectCompositeCellBoxAdapter_context, "f").boxAdapters.adapterFor(box, Devices.isAudioEffect), Pointers.AudioEffectHost)), "f");
36
+ __classPrivateFieldSet(this, _AudioEffectCompositeCellBoxAdapter_parametric, __classPrivateFieldGet(this, _AudioEffectCompositeCellBoxAdapter_terminator, "f").own(new ParameterAdapterSet(__classPrivateFieldGet(this, _AudioEffectCompositeCellBoxAdapter_context, "f"))), "f");
37
+ this.namedParameter = __classPrivateFieldGet(this, _AudioEffectCompositeCellBoxAdapter_instances, "m", _AudioEffectCompositeCellBoxAdapter_wrapParameters).call(this, box);
38
+ }
39
+ get box() { return __classPrivateFieldGet(this, _AudioEffectCompositeCellBoxAdapter_box, "f"); }
40
+ get uuid() { return __classPrivateFieldGet(this, _AudioEffectCompositeCellBoxAdapter_box, "f").address.uuid; }
41
+ get address() { return __classPrivateFieldGet(this, _AudioEffectCompositeCellBoxAdapter_box, "f").address; }
42
+ get indexField() { return __classPrivateFieldGet(this, _AudioEffectCompositeCellBoxAdapter_box, "f").index; }
43
+ get labelField() { return __classPrivateFieldGet(this, _AudioEffectCompositeCellBoxAdapter_box, "f").label; }
44
+ get minimizedField() { return __classPrivateFieldGet(this, _AudioEffectCompositeCellBoxAdapter_box, "f").minimized; }
45
+ get label() { return __classPrivateFieldGet(this, _AudioEffectCompositeCellBoxAdapter_box, "f").label.getValue(); }
46
+ // An audio entry hosts an audio chain only: no midi chain, and no instrument to head it.
47
+ get audioEffects() {
48
+ return Option.wrap(__classPrivateFieldGet(this, _AudioEffectCompositeCellBoxAdapter_audioEffects, "f"));
49
+ }
50
+ get midiEffects() {
51
+ return Option.None;
52
+ }
53
+ get audioEffectsField() { return Option.wrap(__classPrivateFieldGet(this, _AudioEffectCompositeCellBoxAdapter_box, "f").audioEffects); }
54
+ get midiEffectsField() { return Option.None; }
55
+ get inputAdapter() { return Option.None; }
56
+ get hostsInstrument() { return false; }
57
+ get isAudioUnit() { return false; }
58
+ get inputField() {
59
+ return this.audioUnitBoxAdapter().box.input;
60
+ }
61
+ get tracksField() { return this.audioUnitBoxAdapter().box.tracks; }
62
+ // The COMPOSITE DEVICE this entry belongs to, resolved through the entry's mandatory `composite` pointer.
63
+ compositeDevice() {
64
+ return __classPrivateFieldGet(this, _AudioEffectCompositeCellBoxAdapter_context, "f").boxAdapters
65
+ .adapterFor(__classPrivateFieldGet(this, _AudioEffectCompositeCellBoxAdapter_box, "f").composite.targetVertex.unwrap("composite.target").box, AudioCompositeAdapter);
66
+ }
67
+ // The host the OWNING COMPOSITE lives in — where the panel returns to when leaving this entry. NOT the
68
+ // composite itself (see `compositeDevice`): an entry's host is where its composite sits in a chain.
69
+ deviceHost() { return this.compositeDevice().deviceHost(); }
70
+ audioUnitBoxAdapter() { return this.deviceHost().audioUnitBoxAdapter(); }
71
+ *labeledAudioOutputs() {
72
+ yield { address: this.address, label: this.label, children: () => Option.None };
73
+ for (const effect of __classPrivateFieldGet(this, _AudioEffectCompositeCellBoxAdapter_audioEffects, "f").adapters()) {
74
+ yield* effect.labeledAudioOutputs();
75
+ }
76
+ }
77
+ terminate() { __classPrivateFieldGet(this, _AudioEffectCompositeCellBoxAdapter_terminator, "f").terminate(); }
78
+ copyToIndex(index) {
79
+ AudioEffectCompositeCellBox.create(__classPrivateFieldGet(this, _AudioEffectCompositeCellBoxAdapter_box, "f").graph, UUID.generate(), box => {
80
+ box.composite.refer(__classPrivateFieldGet(this, _AudioEffectCompositeCellBoxAdapter_box, "f").composite.targetVertex.unwrap("composite.target"));
81
+ box.index.setValue(index);
82
+ box.label.setValue(__classPrivateFieldGet(this, _AudioEffectCompositeCellBoxAdapter_box, "f").label.getValue());
83
+ box.gain.setValue(__classPrivateFieldGet(this, _AudioEffectCompositeCellBoxAdapter_box, "f").gain.getValue());
84
+ box.pan.setValue(__classPrivateFieldGet(this, _AudioEffectCompositeCellBoxAdapter_box, "f").pan.getValue());
85
+ box.mute.setValue(__classPrivateFieldGet(this, _AudioEffectCompositeCellBoxAdapter_box, "f").mute.getValue());
86
+ box.solo.setValue(__classPrivateFieldGet(this, _AudioEffectCompositeCellBoxAdapter_box, "f").solo.getValue());
87
+ });
88
+ }
89
+ }
90
+ _AudioEffectCompositeCellBoxAdapter_terminator = new WeakMap(), _AudioEffectCompositeCellBoxAdapter_context = new WeakMap(), _AudioEffectCompositeCellBoxAdapter_box = new WeakMap(), _AudioEffectCompositeCellBoxAdapter_audioEffects = new WeakMap(), _AudioEffectCompositeCellBoxAdapter_parametric = new WeakMap(), _AudioEffectCompositeCellBoxAdapter_instances = new WeakSet(), _AudioEffectCompositeCellBoxAdapter_wrapParameters = function _AudioEffectCompositeCellBoxAdapter_wrapParameters(box) {
91
+ return {
92
+ gain: __classPrivateFieldGet(this, _AudioEffectCompositeCellBoxAdapter_parametric, "f").createParameter(box.gain, ValueMapping.DefaultDecibel, StringMapping.numeric({ unit: "dB", fractionDigits: 1 }), "Gain"),
93
+ pan: __classPrivateFieldGet(this, _AudioEffectCompositeCellBoxAdapter_parametric, "f").createParameter(box.pan, ValueMapping.bipolar(), StringMapping.panning, "Pan", 0.5),
94
+ mute: __classPrivateFieldGet(this, _AudioEffectCompositeCellBoxAdapter_parametric, "f").createParameter(box.mute, ValueMapping.bool, StringMapping.bool, "Mute"),
95
+ solo: __classPrivateFieldGet(this, _AudioEffectCompositeCellBoxAdapter_parametric, "f").createParameter(box.solo, ValueMapping.bool, StringMapping.bool, "Solo")
96
+ };
97
+ };
@@ -0,0 +1,9 @@
1
+ import { AudioEffectCompositeBox } from "@opendaw/studio-boxes";
2
+ import { BoxAdaptersContext } from "../../BoxAdaptersContext";
3
+ import { AudioCompositeAdapter } from "./AudioEffectComposite/AudioCompositeAdapter";
4
+ export declare class AudioEffectCompositeBoxAdapter extends AudioCompositeAdapter {
5
+ constructor(context: BoxAdaptersContext, box: AudioEffectCompositeBox);
6
+ get entriesFixed(): boolean;
7
+ get manualUrl(): string;
8
+ }
9
+ //# sourceMappingURL=AudioEffectCompositeBoxAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AudioEffectCompositeBoxAdapter.d.ts","sourceRoot":"","sources":["../../../src/devices/audio-effects/AudioEffectCompositeBoxAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,uBAAuB,EAAC,MAAM,uBAAuB,CAAA;AAC7D,OAAO,EAAC,kBAAkB,EAAC,MAAM,0BAA0B,CAAA;AAE3D,OAAO,EAAC,qBAAqB,EAAC,MAAM,8CAA8C,CAAA;AAIlF,qBAAa,8BAA+B,SAAQ,qBAAqB;gBACzD,OAAO,EAAE,kBAAkB,EAAE,GAAG,EAAE,uBAAuB;IAIrE,IAAI,YAAY,IAAI,OAAO,CAAe;IAC1C,IAAI,SAAS,IAAI,MAAM,CAA+C;CACzE"}
@@ -0,0 +1,11 @@
1
+ import { DeviceManualUrls } from "../../DeviceManualUrls";
2
+ import { AudioCompositeAdapter } from "./AudioEffectComposite/AudioCompositeAdapter";
3
+ // The parallel FX composite: the user builds the entry list, so entries are add / remove / reorder-able. Its
4
+ // input is BROADCAST to every entry (see AudioCompositeAdapter for the shared behaviour).
5
+ export class AudioEffectCompositeBoxAdapter extends AudioCompositeAdapter {
6
+ constructor(context, box) {
7
+ super(context, box);
8
+ }
9
+ get entriesFixed() { return false; }
10
+ get manualUrl() { return DeviceManualUrls.AudioEffectComposite; }
11
+ }
@@ -0,0 +1,16 @@
1
+ import { Address } from "@opendaw/lib-box";
2
+ import { FrequencySplitBox } from "@opendaw/studio-boxes";
3
+ import { BoxAdaptersContext } from "../../BoxAdaptersContext";
4
+ import { AudioCompositeAdapter } from "./AudioEffectComposite/AudioCompositeAdapter";
5
+ import { AutomatableParameterFieldAdapter } from "../../AutomatableParameterFieldAdapter";
6
+ export declare class FrequencySplitBoxAdapter extends AudioCompositeAdapter {
7
+ #private;
8
+ static readonly MAX_BANDS = 4;
9
+ readonly crossover: ReadonlyArray<AutomatableParameterFieldAdapter<number>>;
10
+ constructor(context: BoxAdaptersContext, box: FrequencySplitBox);
11
+ get crossoverCount(): number;
12
+ get spectrum(): Address;
13
+ get entriesFixed(): boolean;
14
+ get manualUrl(): string;
15
+ }
16
+ //# sourceMappingURL=FrequencySplitBoxAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FrequencySplitBoxAdapter.d.ts","sourceRoot":"","sources":["../../../src/devices/audio-effects/FrequencySplitBoxAdapter.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,OAAO,EAAC,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAC,iBAAiB,EAAC,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAC,kBAAkB,EAAC,MAAM,0BAA0B,CAAA;AAE3D,OAAO,EAAC,qBAAqB,EAAC,MAAM,8CAA8C,CAAA;AAElF,OAAO,EAAC,gCAAgC,EAAC,MAAM,wCAAwC,CAAA;AAKvF,qBAAa,wBAAyB,SAAQ,qBAAqB;;IAC/D,MAAM,CAAC,QAAQ,CAAC,SAAS,KAAI;IAG7B,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,gCAAgC,CAAC,MAAM,CAAC,CAAC,CAAA;gBAE/D,OAAO,EAAE,kBAAkB,EAAE,GAAG,EAAE,iBAAiB;IAU/D,IAAI,cAAc,IAAI,MAAM,CAAyD;IAErF,IAAI,QAAQ,IAAI,OAAO,CAAoC;IAE3D,IAAI,YAAY,IAAI,OAAO,CAAc;IACzC,IAAI,SAAS,IAAI,MAAM,CAAyC;CACnE"}
@@ -0,0 +1,36 @@
1
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
2
+ if (kind === "m") throw new TypeError("Private method is not writable");
3
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
4
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
5
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
6
+ };
7
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
8
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
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
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
11
+ };
12
+ var _FrequencySplitBoxAdapter_crossoverParametric;
13
+ import { StringMapping, ValueMapping } from "@opendaw/lib-std";
14
+ import { DeviceManualUrls } from "../../DeviceManualUrls";
15
+ import { AudioCompositeAdapter } from "./AudioEffectComposite/AudioCompositeAdapter";
16
+ import { ParameterAdapterSet } from "../../ParameterAdapterSet";
17
+ const CrossoverMapping = ValueMapping.exponential(20.0, 20000);
18
+ const CrossoverString = StringMapping.numeric({ unit: "Hz", fractionDigits: 0 });
19
+ export class FrequencySplitBoxAdapter extends AudioCompositeAdapter {
20
+ constructor(context, box) {
21
+ super(context, box);
22
+ _FrequencySplitBoxAdapter_crossoverParametric.set(this, void 0);
23
+ __classPrivateFieldSet(this, _FrequencySplitBoxAdapter_crossoverParametric, new ParameterAdapterSet(context), "f");
24
+ this.crossover = [
25
+ __classPrivateFieldGet(this, _FrequencySplitBoxAdapter_crossoverParametric, "f").createParameter(box.crossover1, CrossoverMapping, CrossoverString, "Crossover 1"),
26
+ __classPrivateFieldGet(this, _FrequencySplitBoxAdapter_crossoverParametric, "f").createParameter(box.crossover2, CrossoverMapping, CrossoverString, "Crossover 2"),
27
+ __classPrivateFieldGet(this, _FrequencySplitBoxAdapter_crossoverParametric, "f").createParameter(box.crossover3, CrossoverMapping, CrossoverString, "Crossover 3")
28
+ ];
29
+ }
30
+ get crossoverCount() { return Math.max(0, this.entries.adapters().length - 1); }
31
+ get spectrum() { return this.address.append(0xFFF); }
32
+ get entriesFixed() { return true; }
33
+ get manualUrl() { return DeviceManualUrls.FrequencySplit; }
34
+ }
35
+ _FrequencySplitBoxAdapter_crossoverParametric = new WeakMap();
36
+ FrequencySplitBoxAdapter.MAX_BANDS = 4;
@@ -0,0 +1,9 @@
1
+ import { StereoCompositeBox } from "@opendaw/studio-boxes";
2
+ import { BoxAdaptersContext } from "../../BoxAdaptersContext";
3
+ import { AudioCompositeAdapter } from "./AudioEffectComposite/AudioCompositeAdapter";
4
+ export declare class StereoCompositeBoxAdapter extends AudioCompositeAdapter {
5
+ constructor(context: BoxAdaptersContext, box: StereoCompositeBox);
6
+ get entriesFixed(): boolean;
7
+ get manualUrl(): string;
8
+ }
9
+ //# sourceMappingURL=StereoCompositeBoxAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StereoCompositeBoxAdapter.d.ts","sourceRoot":"","sources":["../../../src/devices/audio-effects/StereoCompositeBoxAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,kBAAkB,EAAC,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAC,kBAAkB,EAAC,MAAM,0BAA0B,CAAA;AAE3D,OAAO,EAAC,qBAAqB,EAAC,MAAM,8CAA8C,CAAA;AAKlF,qBAAa,yBAA0B,SAAQ,qBAAqB;gBACpD,OAAO,EAAE,kBAAkB,EAAE,GAAG,EAAE,kBAAkB;IAIhE,IAAI,YAAY,IAAI,OAAO,CAAc;IACzC,IAAI,SAAS,IAAI,MAAM,CAA0C;CACpE"}
@@ -0,0 +1,12 @@
1
+ import { DeviceManualUrls } from "../../DeviceManualUrls";
2
+ import { AudioCompositeAdapter } from "./AudioEffectComposite/AudioCompositeAdapter";
3
+ // The stereo SPLIT composite: its factory creates exactly two entries (L / R) and the engine feeds entry 0 the
4
+ // left channel and entry 1 the right, so the entry set is FIXED — the UI offers no add / remove / reorder.
5
+ // Everything else is the shared audio-composite behaviour (see AudioCompositeAdapter).
6
+ export class StereoCompositeBoxAdapter extends AudioCompositeAdapter {
7
+ constructor(context, box) {
8
+ super(context, box);
9
+ }
10
+ get entriesFixed() { return true; }
11
+ get manualUrl() { return DeviceManualUrls.StereoComposite; }
12
+ }
@@ -43,18 +43,19 @@ export declare class PlayfieldSampleBoxAdapter implements DeviceHost, Instrument
43
43
  get iconField(): StringField;
44
44
  get defaultTrackType(): TrackType;
45
45
  get acceptsMidiEvents(): boolean;
46
- get midiEffectsField(): Field<Pointers.MIDIEffectHost>;
46
+ get midiEffectsField(): Option<Field<Pointers.MIDIEffectHost>>;
47
47
  get inputField(): Field<Pointers.InstrumentHost | Pointers.AudioOutput>;
48
- get audioEffectsField(): Field<Pointers.AudioEffectHost>;
48
+ get audioEffectsField(): Option<Field<Pointers.AudioEffectHost>>;
49
49
  get tracksField(): Field<Pointers.TrackCollection>;
50
50
  get isAudioUnit(): boolean;
51
+ get hostsInstrument(): boolean;
51
52
  file(): Option<AudioFileBoxAdapter>;
52
53
  fileUUID(): UUID.Bytes;
53
54
  resetParameters(): void;
54
55
  copyToIndex(index: int): void;
55
- get midiEffects(): IndexedBoxAdapterCollection<MidiEffectDeviceAdapter, Pointers.MIDIEffectHost>;
56
+ get midiEffects(): Option<IndexedBoxAdapterCollection<MidiEffectDeviceAdapter, Pointers.MIDIEffectHost>>;
56
57
  get inputAdapter(): Option<AudioUnitInputAdapter>;
57
- get audioEffects(): IndexedBoxAdapterCollection<AudioEffectDeviceAdapter, Pointers.AudioEffectHost>;
58
+ get audioEffects(): Option<IndexedBoxAdapterCollection<AudioEffectDeviceAdapter, Pointers.AudioEffectHost>>;
58
59
  get labelField(): StringField;
59
60
  get enabledField(): BooleanField;
60
61
  get minimizedField(): BooleanField;
@@ -1 +1 @@
1
- {"version":3,"file":"PlayfieldSampleBoxAdapter.d.ts","sourceRoot":"","sources":["../../../../src/devices/instruments/Playfield/PlayfieldSampleBoxAdapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PlayfieldSampleBoxAdapter.d.ts","sourceRoot":"","sources":["../../../../src/devices/instruments/Playfield/PlayfieldSampleBoxAdapter.ts"],"names":[],"mappings":"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"}
@@ -58,11 +58,12 @@ export class PlayfieldSampleBoxAdapter {
58
58
  get iconField() { return __classPrivateFieldGet(this, _PlayfieldSampleBoxAdapter_box, "f").icon; }
59
59
  get defaultTrackType() { return TrackType.Notes; }
60
60
  get acceptsMidiEvents() { return true; }
61
- get midiEffectsField() { return __classPrivateFieldGet(this, _PlayfieldSampleBoxAdapter_box, "f").midiEffects; }
61
+ get midiEffectsField() { return Option.wrap(__classPrivateFieldGet(this, _PlayfieldSampleBoxAdapter_box, "f").midiEffects); }
62
62
  get inputField() { return this.audioUnitBoxAdapter().box.input; }
63
- get audioEffectsField() { return __classPrivateFieldGet(this, _PlayfieldSampleBoxAdapter_box, "f").audioEffects; }
63
+ get audioEffectsField() { return Option.wrap(__classPrivateFieldGet(this, _PlayfieldSampleBoxAdapter_box, "f").audioEffects); }
64
64
  get tracksField() { return this.audioUnitBoxAdapter().box.tracks; }
65
65
  get isAudioUnit() { return false; }
66
+ get hostsInstrument() { return true; } // the slot's own sample player heads its chains
66
67
  file() { return __classPrivateFieldGet(this, _PlayfieldSampleBoxAdapter_file, "f"); }
67
68
  fileUUID() { return __classPrivateFieldGet(this, _PlayfieldSampleBoxAdapter_box, "f").file.targetAddress.unwrap("file.targetAddr").uuid; }
68
69
  resetParameters() {
@@ -94,14 +95,15 @@ export class PlayfieldSampleBoxAdapter {
94
95
  // TODO Copy effects?
95
96
  });
96
97
  }
98
+ // A Playfield slot hosts BOTH chain kinds around its sample (see `DeviceHost` for why these are `Option`).
97
99
  get midiEffects() {
98
- return __classPrivateFieldGet(this, _PlayfieldSampleBoxAdapter_midiEffects, "f");
100
+ return Option.wrap(__classPrivateFieldGet(this, _PlayfieldSampleBoxAdapter_midiEffects, "f"));
99
101
  }
100
102
  get inputAdapter() {
101
103
  return Option.wrap(this);
102
104
  }
103
105
  get audioEffects() {
104
- return __classPrivateFieldGet(this, _PlayfieldSampleBoxAdapter_audioEffects, "f");
106
+ return Option.wrap(__classPrivateFieldGet(this, _PlayfieldSampleBoxAdapter_audioEffects, "f"));
105
107
  }
106
108
  get labelField() { return asInstanceOf(__classPrivateFieldGet(this, _PlayfieldSampleBoxAdapter_box, "f").file.targetVertex.unwrap("file.target").box, AudioFileBox).fileName; }
107
109
  get enabledField() { return __classPrivateFieldGet(this, _PlayfieldSampleBoxAdapter_box, "f").enabled; }
package/dist/index.d.ts CHANGED
@@ -51,17 +51,22 @@ export * from "./audio/AudioTimeStretchBoxAdapter";
51
51
  export * from "./audio/MarkerComparator";
52
52
  export * from "./audio/TransientMarkerBoxAdapter";
53
53
  export * from "./audio/WarpMarkerBoxAdapter";
54
+ export * from "./devices/audio-effects/AudioEffectComposite/AudioCompositeAdapter";
55
+ export * from "./devices/audio-effects/AudioEffectComposite/AudioEffectCompositeCellBoxAdapter";
56
+ export * from "./devices/audio-effects/AudioEffectCompositeBoxAdapter";
54
57
  export * from "./devices/audio-effects/CompressorDeviceBoxAdapter";
55
58
  export * from "./devices/audio-effects/CrusherDeviceBoxAdapter";
56
59
  export * from "./devices/audio-effects/DattorroReverbDeviceBoxAdapter";
57
60
  export * from "./devices/audio-effects/DelayDeviceBoxAdapter";
58
61
  export * from "./devices/audio-effects/FoldDeviceBoxAdapter";
62
+ export * from "./devices/audio-effects/FrequencySplitBoxAdapter";
59
63
  export * from "./devices/audio-effects/GateDeviceBoxAdapter";
60
64
  export * from "./devices/audio-effects/MaximizerDeviceBoxAdapter";
61
65
  export * from "./devices/audio-effects/ModularDeviceBoxAdapter";
62
66
  export * from "./devices/audio-effects/NeuralAmpDeviceBoxAdapter";
63
67
  export * from "./devices/audio-effects/RevampDeviceBoxAdapter";
64
68
  export * from "./devices/audio-effects/ReverbDeviceBoxAdapter";
69
+ export * from "./devices/audio-effects/StereoCompositeBoxAdapter";
65
70
  export * from "./devices/audio-effects/StereoToolDeviceBoxAdapter";
66
71
  export * from "./devices/audio-effects/TidalDeviceBoxAdapter";
67
72
  export * from "./devices/audio-effects/UnknownAudioEffectDeviceBoxAdapter";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,cAAc,oCAAoC,CAAA;AAClD,cAAc,sBAAsB,CAAA;AACpC,cAAc,cAAc,CAAA;AAC5B,cAAc,wBAAwB,CAAA;AACtC,cAAc,eAAe,CAAA;AAC7B,cAAc,sBAAsB,CAAA;AACpC,cAAc,cAAc,CAAA;AAC5B,cAAc,qBAAqB,CAAA;AACnC,cAAc,kBAAkB,CAAA;AAChC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,aAAa,CAAA;AAC3B,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,qBAAqB,CAAA;AACnC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mBAAmB,CAAA;AACjC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,YAAY,CAAA;AAC1B,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,cAAc,CAAA;AAC5B,cAAc,sBAAsB,CAAA;AACpC,cAAc,uBAAuB,CAAA;AACrC,cAAc,0BAA0B,CAAA;AACxC,cAAc,WAAW,CAAA;AACzB,cAAc,6BAA6B,CAAA;AAC3C,cAAc,oBAAoB,CAAA;AAClC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,cAAc,CAAA;AAC5B,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA;AAChC,cAAc,qBAAqB,CAAA;AACnC,cAAc,cAAc,CAAA;AAC5B,cAAc,qBAAqB,CAAA;AACnC,cAAc,aAAa,CAAA;AAC3B,cAAc,mBAAmB,CAAA;AACjC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,kCAAkC,CAAA;AAChD,cAAc,6BAA6B,CAAA;AAC3C,cAAc,oCAAoC,CAAA;AAClD,cAAc,8BAA8B,CAAA;AAC5C,cAAc,8BAA8B,CAAA;AAC5C,cAAc,gCAAgC,CAAA;AAC9C,cAAc,6BAA6B,CAAA;AAC3C,cAAc,qCAAqC,CAAA;AACnD,cAAc,uBAAuB,CAAA;AACrC,cAAc,oCAAoC,CAAA;AAClD,cAAc,oCAAoC,CAAA;AAClD,cAAc,0BAA0B,CAAA;AACxC,cAAc,mCAAmC,CAAA;AACjD,cAAc,8BAA8B,CAAA;AAC5C,cAAc,oEAAoE,CAAA;AAClF,cAAc,iFAAiF,CAAA;AAC/F,cAAc,wDAAwD,CAAA;AACtE,cAAc,oDAAoD,CAAA;AAClE,cAAc,iDAAiD,CAAA;AAC/D,cAAc,wDAAwD,CAAA;AACtE,cAAc,+CAA+C,CAAA;AAC7D,cAAc,8CAA8C,CAAA;AAC5D,cAAc,kDAAkD,CAAA;AAChE,cAAc,8CAA8C,CAAA;AAC5D,cAAc,mDAAmD,CAAA;AACjE,cAAc,iDAAiD,CAAA;AAC/D,cAAc,mDAAmD,CAAA;AACjE,cAAc,gDAAgD,CAAA;AAC9D,cAAc,gDAAgD,CAAA;AAC9D,cAAc,mDAAmD,CAAA;AACjE,cAAc,oDAAoD,CAAA;AAClE,cAAc,+CAA+C,CAAA;AAC7D,cAAc,4DAA4D,CAAA;AAC1E,cAAc,iDAAiD,CAAA;AAC/D,cAAc,oDAAoD,CAAA;AAClE,cAAc,mDAAmD,CAAA;AACjE,cAAc,+CAA+C,CAAA;AAC7D,cAAc,kDAAkD,CAAA;AAChE,cAAc,4CAA4C,CAAA;AAC1D,cAAc,sCAAsC,CAAA;AACpD,cAAc,2DAA2D,CAAA;AACzE,cAAc,iDAAiD,CAAA;AAC/D,cAAc,iDAAiD,CAAA;AAC/D,cAAc,4CAA4C,CAAA;AAC1D,cAAc,oDAAoD,CAAA;AAClE,cAAc,4CAA4C,CAAA;AAC1D,cAAc,iDAAiD,CAAA;AAC/D,cAAc,8CAA8C,CAAA;AAC5D,cAAc,kDAAkD,CAAA;AAChE,cAAc,0DAA0D,CAAA;AACxE,cAAc,iDAAiD,CAAA;AAC/D,cAAc,kDAAkD,CAAA;AAChE,cAAc,uBAAuB,CAAA;AACrC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,kCAAkC,CAAA;AAChD,cAAc,6BAA6B,CAAA;AAC3C,cAAc,8BAA8B,CAAA;AAC5C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,wBAAwB,CAAA;AACtC,cAAc,2BAA2B,CAAA;AACzC,cAAc,2BAA2B,CAAA;AACzC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,mCAAmC,CAAA;AACjD,cAAc,oBAAoB,CAAA;AAClC,cAAc,sBAAsB,CAAA;AACpC,cAAc,qBAAqB,CAAA;AACnC,cAAc,mBAAmB,CAAA;AACjC,cAAc,kBAAkB,CAAA;AAChC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,gCAAgC,CAAA;AAC9C,cAAc,yBAAyB,CAAA;AACvC,cAAc,wBAAwB,CAAA;AACtC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,0BAA0B,CAAA;AACxC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,oBAAoB,CAAA;AAClC,cAAc,wBAAwB,CAAA;AACtC,cAAc,wBAAwB,CAAA;AACtC,cAAc,uBAAuB,CAAA;AACrC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,0BAA0B,CAAA;AACxC,cAAc,2BAA2B,CAAA;AACzC,cAAc,aAAa,CAAA;AAC3B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,uBAAuB,CAAA;AACrC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,yBAAyB,CAAA;AACvC,cAAc,qCAAqC,CAAA;AACnD,cAAc,+BAA+B,CAAA;AAC7C,cAAc,8BAA8B,CAAA;AAC5C,cAAc,8BAA8B,CAAA;AAC5C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,6BAA6B,CAAA;AAC3C,cAAc,2BAA2B,CAAA;AACzC,cAAc,uBAAuB,CAAA;AACrC,cAAc,qCAAqC,CAAA;AACnD,cAAc,6BAA6B,CAAA;AAC3C,cAAc,oCAAoC,CAAA;AAClD,cAAc,kCAAkC,CAAA;AAChD,cAAc,+BAA+B,CAAA;AAC7C,cAAc,mCAAmC,CAAA;AACjD,cAAc,2BAA2B,CAAA;AACzC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,6BAA6B,CAAA;AAC3C,cAAc,0BAA0B,CAAA;AACxC,cAAc,qCAAqC,CAAA;AACnD,cAAc,kCAAkC,CAAA;AAChD,cAAc,+BAA+B,CAAA;AAC7C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,uBAAuB,CAAA;AACrC,cAAc,yBAAyB,CAAA;AACvC,cAAc,sBAAsB,CAAA;AACpC,cAAc,qCAAqC,CAAA;AACnD,cAAc,oCAAoC,CAAA;AAClD,cAAc,qCAAqC,CAAA;AACnD,cAAc,qDAAqD,CAAA;AACnE,cAAc,sDAAsD,CAAA;AACpE,cAAc,4CAA4C,CAAA;AAC1D,cAAc,sCAAsC,CAAA;AACpD,cAAc,uCAAuC,CAAA;AACrD,cAAc,uCAAuC,CAAA;AACrD,cAAc,yCAAyC,CAAA;AACvD,cAAc,iCAAiC,CAAA;AAC/C,cAAc,iCAAiC,CAAA;AAC/C,cAAc,wCAAwC,CAAA;AACtD,cAAc,yCAAyC,CAAA;AACvD,cAAc,+BAA+B,CAAA;AAC7C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,0BAA0B,CAAA;AACxC,cAAc,UAAU,CAAA;AACxB,YAAY,EAAC,WAAW,EAAE,mBAAmB,EAAC,MAAM,qBAAqB,CAAA;AACzE,OAAO,EAAC,iBAAiB,EAAE,iBAAiB,EAAE,eAAe,EAAC,MAAM,qBAAqB,CAAA"}
package/dist/index.js CHANGED
@@ -53,17 +53,22 @@ export * from "./audio/AudioTimeStretchBoxAdapter";
53
53
  export * from "./audio/MarkerComparator";
54
54
  export * from "./audio/TransientMarkerBoxAdapter";
55
55
  export * from "./audio/WarpMarkerBoxAdapter";
56
+ export * from "./devices/audio-effects/AudioEffectComposite/AudioCompositeAdapter";
57
+ export * from "./devices/audio-effects/AudioEffectComposite/AudioEffectCompositeCellBoxAdapter";
58
+ export * from "./devices/audio-effects/AudioEffectCompositeBoxAdapter";
56
59
  export * from "./devices/audio-effects/CompressorDeviceBoxAdapter";
57
60
  export * from "./devices/audio-effects/CrusherDeviceBoxAdapter";
58
61
  export * from "./devices/audio-effects/DattorroReverbDeviceBoxAdapter";
59
62
  export * from "./devices/audio-effects/DelayDeviceBoxAdapter";
60
63
  export * from "./devices/audio-effects/FoldDeviceBoxAdapter";
64
+ export * from "./devices/audio-effects/FrequencySplitBoxAdapter";
61
65
  export * from "./devices/audio-effects/GateDeviceBoxAdapter";
62
66
  export * from "./devices/audio-effects/MaximizerDeviceBoxAdapter";
63
67
  export * from "./devices/audio-effects/ModularDeviceBoxAdapter";
64
68
  export * from "./devices/audio-effects/NeuralAmpDeviceBoxAdapter";
65
69
  export * from "./devices/audio-effects/RevampDeviceBoxAdapter";
66
70
  export * from "./devices/audio-effects/ReverbDeviceBoxAdapter";
71
+ export * from "./devices/audio-effects/StereoCompositeBoxAdapter";
67
72
  export * from "./devices/audio-effects/StereoToolDeviceBoxAdapter";
68
73
  export * from "./devices/audio-effects/TidalDeviceBoxAdapter";
69
74
  export * from "./devices/audio-effects/UnknownAudioEffectDeviceBoxAdapter";
@@ -2,7 +2,6 @@ import { ExportConfiguration } from "./EngineProcessorAttachment";
2
2
  export interface OfflineEngineInitializeConfig {
3
3
  sampleRate: number;
4
4
  numberOfChannels: number;
5
- processorsUrl: string;
6
5
  syncStreamBuffer: SharedArrayBuffer;
7
6
  controlFlagsBuffer: SharedArrayBuffer;
8
7
  project: ArrayBufferLike;
@@ -1 +1 @@
1
- {"version":3,"file":"offline-renderer.d.ts","sourceRoot":"","sources":["../src/offline-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,mBAAmB,EAAC,MAAM,6BAA6B,CAAA;AAE/D,MAAM,WAAW,6BAA6B;IAC1C,UAAU,EAAE,MAAM,CAAA;IAClB,gBAAgB,EAAE,MAAM,CAAA;IACxB,aAAa,EAAE,MAAM,CAAA;IACrB,gBAAgB,EAAE,iBAAiB,CAAA;IACnC,kBAAkB,EAAE,iBAAiB,CAAA;IACrC,OAAO,EAAE,eAAe,CAAA;IACxB,mBAAmB,CAAC,EAAE,mBAAmB,CAAA;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACpC;AAED,MAAM,WAAW,yBAAyB;IACtC,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAC/B,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAC9B;AAED,MAAM,WAAW,qBAAqB;IAClC,UAAU,CAAC,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,6BAA6B,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACzF,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACtC,MAAM,CAAC,MAAM,EAAE,yBAAyB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAA;IAClE,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAA;IAC9C,IAAI,IAAI,IAAI,CAAA;CACf"}
1
+ {"version":3,"file":"offline-renderer.d.ts","sourceRoot":"","sources":["../src/offline-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,mBAAmB,EAAC,MAAM,6BAA6B,CAAA;AAE/D,MAAM,WAAW,6BAA6B;IAC1C,UAAU,EAAE,MAAM,CAAA;IAClB,gBAAgB,EAAE,MAAM,CAAA;IACxB,gBAAgB,EAAE,iBAAiB,CAAA;IACnC,kBAAkB,EAAE,iBAAiB,CAAA;IACrC,OAAO,EAAE,eAAe,CAAA;IACxB,mBAAmB,CAAC,EAAE,mBAAmB,CAAA;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACpC;AAED,MAAM,WAAW,yBAAyB;IACtC,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAC/B,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAC9B;AAED,MAAM,WAAW,qBAAqB;IAClC,UAAU,CAAC,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,6BAA6B,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACzF,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACtC,MAAM,CAAC,MAAM,EAAE,yBAAyB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAA;IAClE,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAA;IAC9C,IAAI,IAAI,IAAI,CAAA;CACf"}
@@ -1,4 +1,6 @@
1
1
  import { Attempt, int } from "@opendaw/lib-std";
2
+ import { Field } from "@opendaw/lib-box";
3
+ import { EffectPointerType } from "../DeviceAdapter";
2
4
  import { AudioUnitBox } from "@opendaw/studio-boxes";
3
5
  import { ProjectSkeleton } from "../project/ProjectSkeleton";
4
6
  import { PresetHeader } from "./PresetHeader";
@@ -10,6 +12,6 @@ export declare namespace PresetDecoder {
10
12
  keepAudioEffects?: boolean;
11
13
  keepTimeline?: boolean;
12
14
  }) => Attempt<void, string>;
13
- const insertEffectChain: (bytes: ArrayBufferLike, targetAudioUnit: AudioUnitBox, insertIndex: int, kind: PresetHeader.ChainKind) => Attempt<void, string>;
15
+ const insertEffectChain: (bytes: ArrayBufferLike, targetField: Field<EffectPointerType>, insertIndex: int, kind: PresetHeader.ChainKind) => Attempt<void, string>;
14
16
  }
15
17
  //# sourceMappingURL=PresetDecoder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PresetDecoder.d.ts","sourceRoot":"","sources":["../../src/preset/PresetDecoder.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,OAAO,EAGP,GAAG,EAQN,MAAM,kBAAkB,CAAA;AAGzB,OAAO,EAEH,YAAY,EAOf,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAC,eAAe,EAAC,MAAM,4BAA4B,CAAA;AAE1D,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAA;AAG3C,yBAAiB,aAAa,CAAC;IACpB,MAAM,MAAM,GAAI,OAAO,eAAe,EAAE,QAAQ,eAAe,KAAG,aAAa,CAAC,YAAY,CAqElG,CAAA;IAEM,MAAM,eAAe,GAAI,aAAa,WAAW,KAAG,OAY1D,CAAA;IAEM,MAAM,gBAAgB,GAAI,aAAa,WAAW,EAAE,oBAAoB,YAAY,EAAE,UAAU;QACnG,eAAe,CAAC,EAAE,OAAO,CAAA;QACzB,gBAAgB,CAAC,EAAE,OAAO,CAAA;QAC1B,YAAY,CAAC,EAAE,OAAO,CAAA;KACzB,KAAG,OAAO,CAAC,IAAI,EAAE,MAAM,CAsHvB,CAAA;IAEM,MAAM,iBAAiB,GAC1B,OAAO,eAAe,EACtB,iBAAiB,YAAY,EAC7B,aAAa,GAAG,EAChB,MAAM,YAAY,CAAC,SAAS,KAC7B,OAAO,CAAC,IAAI,EAAE,MAAM,CAgGtB,CAAA;CACJ"}
1
+ {"version":3,"file":"PresetDecoder.d.ts","sourceRoot":"","sources":["../../src/preset/PresetDecoder.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,OAAO,EAGP,GAAG,EAQN,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAyB,KAAK,EAA2B,MAAM,kBAAkB,CAAA;AACxF,OAAO,EAAC,iBAAiB,EAAC,MAAM,kBAAkB,CAAA;AAElD,OAAO,EAEH,YAAY,EAOf,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAC,eAAe,EAAC,MAAM,4BAA4B,CAAA;AAE1D,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAA;AAG3C,yBAAiB,aAAa,CAAC;IACpB,MAAM,MAAM,GAAI,OAAO,eAAe,EAAE,QAAQ,eAAe,KAAG,aAAa,CAAC,YAAY,CAqElG,CAAA;IAEM,MAAM,eAAe,GAAI,aAAa,WAAW,KAAG,OAY1D,CAAA;IAEM,MAAM,gBAAgB,GAAI,aAAa,WAAW,EAAE,oBAAoB,YAAY,EAAE,UAAU;QACnG,eAAe,CAAC,EAAE,OAAO,CAAA;QACzB,gBAAgB,CAAC,EAAE,OAAO,CAAA;QAC1B,YAAY,CAAC,EAAE,OAAO,CAAA;KACzB,KAAG,OAAO,CAAC,IAAI,EAAE,MAAM,CAsHvB,CAAA;IAEM,MAAM,iBAAiB,GAC1B,OAAO,eAAe,EACtB,aAAa,KAAK,CAAC,iBAAiB,CAAC,EACrC,aAAa,GAAG,EAChB,MAAM,YAAY,CAAC,SAAS,KAC7B,OAAO,CAAC,IAAI,EAAE,MAAM,CAmGtB,CAAA;CACJ"}
@@ -220,7 +220,7 @@ export var PresetDecoder;
220
220
  });
221
221
  return Attempts.Ok;
222
222
  };
223
- PresetDecoder.insertEffectChain = (bytes, targetAudioUnit, insertIndex, kind) => {
223
+ PresetDecoder.insertEffectChain = (bytes, targetField, insertIndex, kind) => {
224
224
  if (bytes.byteLength < 8) {
225
225
  return Attempts.err("Invalid preset header");
226
226
  }
@@ -251,14 +251,11 @@ export var PresetDecoder;
251
251
  if (effects.length === 0) {
252
252
  return Attempts.err("Preset contains no effects of the requested kind");
253
253
  }
254
- const targetField = kind === PresetHeader.ChainKind.Audio
255
- ? targetAudioUnit.audioEffects
256
- : targetAudioUnit.midiEffects;
257
254
  const targetFieldAddress = targetField.address;
258
255
  const hostPointerType = kind === PresetHeader.ChainKind.Audio
259
256
  ? Pointers.AudioEffectHost
260
257
  : Pointers.MIDIEffectHost;
261
- const targetGraph = targetAudioUnit.graph;
258
+ const targetGraph = targetField.box.graph;
262
259
  const count = effects.length;
263
260
  const existing = IndexedBox.collectIndexedBoxes(targetField);
264
261
  for (let i = existing.length - 1; i >= 0; i--) {
@@ -293,13 +290,19 @@ export var PresetDecoder;
293
290
  ]);
294
291
  PointerField.decodeWith({
295
292
  map: (pointer, address) => {
293
+ // An INTERNAL target (a box inserted along with the chain) always re-targets to its copy —
294
+ // checked FIRST, and including host pointers: an effect nested inside a composite entry is
295
+ // hosted BY THAT ENTRY, and re-targeting it onto the destination chain would rip it out and
296
+ // flatten the composite.
297
+ const internal = address.flatMap(addr => uuidMap.opt(addr.uuid).map(({ target }) => addr.moveTo(target)));
298
+ if (internal.nonEmpty()) {
299
+ return internal;
300
+ }
301
+ // A host pointing OUTSIDE the inserted set is a chain ROOT: re-target it onto the destination.
296
302
  if (pointer.pointerType === hostPointerType) {
297
303
  return Option.wrap(targetFieldAddress);
298
304
  }
299
- return address.flatMap(addr => uuidMap.opt(addr.uuid).match({
300
- some: ({ target }) => Option.wrap(addr.moveTo(target)),
301
- none: () => targetGraph.findBox(addr.uuid).nonEmpty() ? Option.wrap(addr) : Option.None
302
- }));
305
+ return address.flatMap(addr => targetGraph.findBox(addr.uuid).nonEmpty() ? Option.wrap(addr) : Option.None);
303
306
  }
304
307
  }, () => {
305
308
  effects.forEach((source, i) => {
@@ -1 +1 @@
1
- {"version":3,"file":"PresetEncoder.d.ts","sourceRoot":"","sources":["../../src/preset/PresetEncoder.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,GAAG,EAA2B,MAAM,kBAAkB,CAAA;AAC9D,OAAO,EAAC,YAAY,EAA4D,MAAM,uBAAuB,CAAA;AAI7G,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAA;AAE3C,yBAAiB,aAAa,CAAC;IACpB,MAAM,MAAM,GAAI,cAAc,YAAY,EAC1B,UAAS;QACL,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC;QACtC,eAAe,CAAC,EAAE,OAAO,CAAA;KACvB,KAAG,eA+B/B,CAAA;IAEM,MAAM,aAAa,GACtB,SAAS,aAAa,CAAC,GAAG,CAAC,EAC3B,MAAM,YAAY,CAAC,SAAS,KAC7B,eA0EF,CAAA;CACJ"}
1
+ {"version":3,"file":"PresetEncoder.d.ts","sourceRoot":"","sources":["../../src/preset/PresetEncoder.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,GAAG,EAA2B,MAAM,kBAAkB,CAAA;AAC9D,OAAO,EAAC,YAAY,EAA4D,MAAM,uBAAuB,CAAA;AAI7G,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAA;AAE3C,yBAAiB,aAAa,CAAC;IACpB,MAAM,MAAM,GAAI,cAAc,YAAY,EAC1B,UAAS;QACL,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC;QACtC,eAAe,CAAC,EAAE,OAAO,CAAA;KACvB,KAAG,eA+B/B,CAAA;IAEM,MAAM,aAAa,GACtB,SAAS,aAAa,CAAC,GAAG,CAAC,EAC3B,MAAM,YAAY,CAAC,SAAS,KAC7B,eAgFF,CAAA;CACJ"}
@@ -83,13 +83,19 @@ export var PresetEncoder;
83
83
  : Pointers.MIDIEffectHost;
84
84
  PointerField.decodeWith({
85
85
  map: (pointer, address) => {
86
+ // An INTERNAL target (a box copied along with the chain) always re-targets to its copy —
87
+ // checked FIRST, and including host pointers: an effect nested inside a copied composite
88
+ // entry is hosted BY THAT ENTRY, and re-targeting it onto the wrapper chain would rip it
89
+ // out and flatten the composite.
90
+ const internal = address.flatMap(addr => uuidMap.opt(addr.uuid).map(({ target }) => addr.moveTo(target)));
91
+ if (internal.nonEmpty()) {
92
+ return internal;
93
+ }
94
+ // A host pointing OUTSIDE the copied set is a chain ROOT: re-target it onto the wrapper.
86
95
  if (pointer.pointerType === hostPointerType) {
87
96
  return Option.wrap(targetField.address);
88
97
  }
89
- return address.flatMap(addr => uuidMap.opt(addr.uuid).match({
90
- some: ({ target }) => Option.wrap(addr.moveTo(target)),
91
- none: () => boxGraph.findBox(addr.uuid).nonEmpty() ? Option.wrap(addr) : Option.None
92
- }));
98
+ return address.flatMap(addr => boxGraph.findBox(addr.uuid).nonEmpty() ? Option.wrap(addr) : Option.None);
93
99
  }
94
100
  }, () => {
95
101
  effects.forEach((source, i) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opendaw/studio-adapters",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "license": "LGPL-3.0-or-later",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -31,13 +31,13 @@
31
31
  "@opendaw/lib-midi": "^0.0.70",
32
32
  "@opendaw/lib-runtime": "^0.0.83",
33
33
  "@opendaw/lib-std": "^0.0.82",
34
- "@opendaw/studio-boxes": "^0.0.99",
35
- "@opendaw/studio-enums": "^0.0.82",
34
+ "@opendaw/studio-boxes": "^0.0.100",
35
+ "@opendaw/studio-enums": "^0.0.83",
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": "7c1920cfb1d90ae20f6c04e4ce61d3d0bf0678ae"
42
+ "gitHead": "25ee954e5ee3054817662207d50ab00b894ca6f9"
43
43
  }