@opendaw/studio-adapters 0.2.1 → 0.3.1

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 (96) hide show
  1. package/dist/AutomatableParameterFieldAdapter.d.ts +3 -2
  2. package/dist/AutomatableParameterFieldAdapter.d.ts.map +1 -1
  3. package/dist/AutomatableParameterFieldAdapter.js +6 -3
  4. package/dist/BoxAdapters.d.ts.map +1 -1
  5. package/dist/BoxAdapters.js +2 -0
  6. package/dist/DeviceManualUrls.d.ts +3 -3
  7. package/dist/DeviceManualUrls.d.ts.map +1 -1
  8. package/dist/DeviceManualUrls.js +3 -3
  9. package/dist/ParameterAdapterSet.d.ts +2 -2
  10. package/dist/ParameterAdapterSet.d.ts.map +1 -1
  11. package/dist/ParameterOwner.d.ts +10 -0
  12. package/dist/ParameterOwner.d.ts.map +1 -0
  13. package/dist/ParameterOwner.js +73 -0
  14. package/dist/ScriptCompiler.d.ts.map +1 -1
  15. package/dist/ScriptCompiler.js +4 -2
  16. package/dist/ScriptDeclaration.d.ts +1 -0
  17. package/dist/ScriptDeclaration.d.ts.map +1 -1
  18. package/dist/ScriptDeclaration.js +20 -5
  19. package/dist/audio-unit/AudioUnitBoxAdapter.js +4 -4
  20. package/dist/devices/audio-effects/DelayDeviceBoxAdapter.js +13 -13
  21. package/dist/devices/audio-effects/NeuralAmpDeviceBoxAdapter.js +2 -2
  22. package/dist/devices/audio-effects/RevampDeviceBoxAdapter.js +3 -3
  23. package/dist/devices/audio-effects/ReverbDeviceBoxAdapter.d.ts +1 -1
  24. package/dist/devices/audio-effects/ReverbDeviceBoxAdapter.d.ts.map +1 -1
  25. package/dist/devices/audio-effects/ReverbDeviceBoxAdapter.js +4 -4
  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/audio-effects/StereoToolDeviceBoxAdapter.js +1 -1
  29. package/dist/devices/instruments/Cubed/AblPattern.d.ts +42 -0
  30. package/dist/devices/instruments/Cubed/AblPattern.d.ts.map +1 -0
  31. package/dist/devices/instruments/Cubed/AblPattern.js +66 -0
  32. package/dist/devices/instruments/Cubed/CubedPatternData.d.ts +16 -0
  33. package/dist/devices/instruments/Cubed/CubedPatternData.d.ts.map +1 -0
  34. package/dist/devices/instruments/Cubed/CubedPatternData.js +75 -0
  35. package/dist/devices/instruments/Cubed/CubedRandomize.d.ts +22 -0
  36. package/dist/devices/instruments/Cubed/CubedRandomize.d.ts.map +1 -0
  37. package/dist/devices/instruments/Cubed/CubedRandomize.js +51 -0
  38. package/dist/devices/instruments/Cubed/CubedStep.d.ts +13 -0
  39. package/dist/devices/instruments/Cubed/CubedStep.d.ts.map +1 -0
  40. package/dist/devices/instruments/Cubed/CubedStep.js +15 -0
  41. package/dist/devices/instruments/CubedDeviceBoxAdapter.d.ts +48 -0
  42. package/dist/devices/instruments/CubedDeviceBoxAdapter.d.ts.map +1 -0
  43. package/dist/devices/instruments/CubedDeviceBoxAdapter.js +100 -0
  44. package/dist/devices/instruments/MIDIOutputDeviceBoxAdapter.d.ts +1 -1
  45. package/dist/devices/instruments/MIDIOutputDeviceBoxAdapter.d.ts.map +1 -1
  46. package/dist/devices/instruments/MIDIOutputDeviceBoxAdapter.js +19 -3
  47. package/dist/devices/instruments/NanoDeviceBoxAdapter.js +2 -2
  48. package/dist/devices/instruments/Playfield/ChopModel.d.ts +21 -0
  49. package/dist/devices/instruments/Playfield/ChopModel.d.ts.map +1 -0
  50. package/dist/devices/instruments/Playfield/ChopModel.js +109 -0
  51. package/dist/devices/instruments/PlayfieldDeviceBoxAdapter.d.ts +12 -2
  52. package/dist/devices/instruments/PlayfieldDeviceBoxAdapter.d.ts.map +1 -1
  53. package/dist/devices/instruments/PlayfieldDeviceBoxAdapter.js +21 -1
  54. package/dist/devices/instruments/TapeDeviceBoxAdapter.js +4 -4
  55. package/dist/devices/midi-effects/ArpeggioDeviceBoxAdapter.js +1 -1
  56. package/dist/devices/midi-effects/PitchDeviceBoxAdapter.js +3 -3
  57. package/dist/factories/InstrumentBox.d.ts +2 -2
  58. package/dist/factories/InstrumentBox.d.ts.map +1 -1
  59. package/dist/factories/InstrumentFactories.d.ts +5 -9
  60. package/dist/factories/InstrumentFactories.d.ts.map +1 -1
  61. package/dist/factories/InstrumentFactories.js +20 -4
  62. package/dist/grooves/GrooveShuffleBoxAdapter.js +2 -2
  63. package/dist/index.d.ts +6 -0
  64. package/dist/index.d.ts.map +1 -1
  65. package/dist/index.js +6 -0
  66. package/dist/modulation/LfoModulatorBoxAdapter.d.ts +31 -0
  67. package/dist/modulation/LfoModulatorBoxAdapter.d.ts.map +1 -0
  68. package/dist/modulation/LfoModulatorBoxAdapter.js +48 -0
  69. package/dist/modulation/MacroModulatorBoxAdapter.d.ts +11 -0
  70. package/dist/modulation/MacroModulatorBoxAdapter.d.ts.map +1 -0
  71. package/dist/modulation/MacroModulatorBoxAdapter.js +21 -0
  72. package/dist/modulation/ModulationBoxAdapter.d.ts +27 -0
  73. package/dist/modulation/ModulationBoxAdapter.d.ts.map +1 -0
  74. package/dist/modulation/ModulationBoxAdapter.js +72 -0
  75. package/dist/modulation/ModulatorBoxAdapter.d.ts +35 -0
  76. package/dist/modulation/ModulatorBoxAdapter.d.ts.map +1 -0
  77. package/dist/modulation/ModulatorBoxAdapter.js +69 -0
  78. package/dist/modulation/Modulators.d.ts +25 -0
  79. package/dist/modulation/Modulators.d.ts.map +1 -0
  80. package/dist/modulation/Modulators.js +101 -0
  81. package/dist/modulation/RandomModulatorBoxAdapter.d.ts +24 -0
  82. package/dist/modulation/RandomModulatorBoxAdapter.d.ts.map +1 -0
  83. package/dist/modulation/RandomModulatorBoxAdapter.js +62 -0
  84. package/dist/modulation/StepsModulatorBoxAdapter.d.ts +42 -0
  85. package/dist/modulation/StepsModulatorBoxAdapter.d.ts.map +1 -0
  86. package/dist/modulation/StepsModulatorBoxAdapter.js +100 -0
  87. package/dist/timeline/ParameterTracks.d.ts +30 -0
  88. package/dist/timeline/ParameterTracks.d.ts.map +1 -0
  89. package/dist/timeline/ParameterTracks.js +75 -0
  90. package/dist/timeline/TrackBoxAdapter.d.ts +1 -0
  91. package/dist/timeline/TrackBoxAdapter.d.ts.map +1 -1
  92. package/dist/timeline/TrackBoxAdapter.js +20 -11
  93. package/dist/timeline/event/InterpolationFieldAdapter.d.ts +3 -1
  94. package/dist/timeline/event/InterpolationFieldAdapter.d.ts.map +1 -1
  95. package/dist/timeline/event/InterpolationFieldAdapter.js +2 -0
  96. package/package.json +10 -10
@@ -1,4 +1,4 @@
1
- import { ControlSourceListener, Observer, Option, Parameter, StringMapping, StringResult, Subscription, Terminable, unitValue, ValueMapping } from "@opendaw/lib-std";
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
3
  import { Address, PrimitiveField, PrimitiveType, PrimitiveValues } from "@opendaw/lib-box";
4
4
  import { Pointers } from "@opendaw/studio-enums";
@@ -7,7 +7,7 @@ import { AudioUnitTracks } from "./audio-unit/AudioUnitTracks";
7
7
  import { BoxAdaptersContext } from "./BoxAdaptersContext";
8
8
  export declare class AutomatableParameterFieldAdapter<T extends PrimitiveValues = any> implements Parameter<T>, Terminable {
9
9
  #private;
10
- constructor(context: BoxAdaptersContext, field: PrimitiveField<T, any>, valueMapping: ValueMapping<T>, stringMapping: StringMapping<T>, name: string, anchor?: unitValue, resetValue?: T);
10
+ constructor(context: BoxAdaptersContext, field: PrimitiveField<T, any>, valueMapping: ValueMapping<T>, stringMapping: StringMapping<T>, name: string | ObservableValue<string>, anchor?: unitValue, resetValue?: T);
11
11
  registerMidiControl(): Terminable;
12
12
  get field(): PrimitiveField<T, Pointers.Automation>;
13
13
  get valueMapping(): ValueMapping<T>;
@@ -17,6 +17,7 @@ export declare class AutomatableParameterFieldAdapter<T extends PrimitiveValues
17
17
  get type(): PrimitiveType;
18
18
  get address(): Address;
19
19
  get track(): Option<TrackBoxAdapter>;
20
+ catchupAndSubscribeName(observer: Observer<string>): Subscription;
20
21
  registerTracks(tracks: AudioUnitTracks): Terminable;
21
22
  touchStart(): void;
22
23
  touchEnd(): void;
@@ -1 +1 @@
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"}
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"}
@@ -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, isNull, Listeners, Notifier, Option, panic, Terminator } from "@opendaw/lib-std";
13
+ import { assert, clamp, isNull, Listeners, Notifier, ObservableValue, 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 = [
@@ -39,7 +39,7 @@ export class AutomatableParameterFieldAdapter {
39
39
  __classPrivateFieldSet(this, _AutomatableParameterFieldAdapter_field, field, "f");
40
40
  __classPrivateFieldSet(this, _AutomatableParameterFieldAdapter_valueMapping, valueMapping, "f");
41
41
  __classPrivateFieldSet(this, _AutomatableParameterFieldAdapter_stringMapping, stringMapping, "f");
42
- __classPrivateFieldSet(this, _AutomatableParameterFieldAdapter_name, name, "f");
42
+ __classPrivateFieldSet(this, _AutomatableParameterFieldAdapter_name, typeof name === "string" ? ObservableValue.seal(name) : name, "f");
43
43
  __classPrivateFieldSet(this, _AutomatableParameterFieldAdapter_anchor, anchor ?? 0.0, "f");
44
44
  __classPrivateFieldSet(this, _AutomatableParameterFieldAdapter_resetValue, Option.wrap(resetValue), "f");
45
45
  __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_terminator, "f").own(__classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_context, "f").parameterFieldAdapters.register(this));
@@ -119,11 +119,14 @@ export class AutomatableParameterFieldAdapter {
119
119
  get field() { return __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_field, "f"); }
120
120
  get valueMapping() { return __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_valueMapping, "f"); }
121
121
  get stringMapping() { return __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_stringMapping, "f"); }
122
- get name() { return __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_name, "f"); }
122
+ get name() { return __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_name, "f").getValue(); }
123
123
  get anchor() { return __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_anchor, "f"); }
124
124
  get type() { return __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_field, "f").type; }
125
125
  get address() { return __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_field, "f").address; }
126
126
  get track() { return __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_trackBoxAdapter, "f"); }
127
+ catchupAndSubscribeName(observer) {
128
+ return __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_name, "f").catchupAndSubscribe(owner => observer(owner.getValue()));
129
+ }
127
130
  registerTracks(tracks) {
128
131
  return __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_context, "f").parameterFieldAdapters.registerTracks(this.address, tracks);
129
132
  }
@@ -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;AAyH5C,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;CA8E3C"}
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"}
@@ -47,6 +47,7 @@ import { ArpeggioDeviceBoxAdapter } from "./devices/midi-effects/ArpeggioDeviceB
47
47
  import { PitchDeviceBoxAdapter } from "./devices/midi-effects/PitchDeviceBoxAdapter";
48
48
  import { SpielwerkDeviceBoxAdapter } from "./devices/midi-effects/SpielwerkDeviceBoxAdapter";
49
49
  import { ApparatDeviceBoxAdapter } from "./devices/instruments/ApparatDeviceBoxAdapter";
50
+ import { CubedDeviceBoxAdapter } from "./devices/instruments/CubedDeviceBoxAdapter";
50
51
  import { NeonDeviceBoxAdapter } from "./devices/instruments/NeonDeviceBoxAdapter";
51
52
  import { NanoDeviceBoxAdapter } from "./devices/instruments/NanoDeviceBoxAdapter";
52
53
  import { PlayfieldDeviceBoxAdapter } from "./devices/instruments/PlayfieldDeviceBoxAdapter";
@@ -141,6 +142,7 @@ _BoxAdapters_context = new WeakMap(), _BoxAdapters_adapters = new WeakMap(), _Bo
141
142
  visitTransientMarkerBox: (box) => new TransientMarkerBoxAdapter(box),
142
143
  visitWarpMarkerBox: (box) => new WarpMarkerBoxAdapter(__classPrivateFieldGet(this, _BoxAdapters_context, "f"), box),
143
144
  visitApparatDeviceBox: (box) => new ApparatDeviceBoxAdapter(__classPrivateFieldGet(this, _BoxAdapters_context, "f"), box),
145
+ visitCubedDeviceBox: (box) => new CubedDeviceBoxAdapter(__classPrivateFieldGet(this, _BoxAdapters_context, "f"), box),
144
146
  visitAudioRegionBox: (box) => new AudioRegionBoxAdapter(__classPrivateFieldGet(this, _BoxAdapters_context, "f"), box),
145
147
  visitAudioUnitBox: (box) => new AudioUnitBoxAdapter(__classPrivateFieldGet(this, _BoxAdapters_context, "f"), box),
146
148
  visitAuxSendBox: (box) => new AuxSendBoxAdapter(__classPrivateFieldGet(this, _BoxAdapters_context, "f"), box),
@@ -6,13 +6,13 @@ 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
11
  const DattorroReverb = "manuals/devices/audio/dattorro-reverb";
12
12
  const Maximizer = "manuals/devices/audio/maximizer";
13
13
  const Compressor = "manuals/devices/audio/compressor";
14
14
  const Gate = "manuals/devices/audio/gate";
15
- const Reverb = "manuals/devices/audio/cheap-reverb";
15
+ const Reverb = "manuals/devices/audio/reverb";
16
16
  const Crusher = "manuals/devices/audio/crusher";
17
17
  const Fold = "manuals/devices/audio/fold";
18
18
  const Tidal = "manuals/devices/audio/tidal";
@@ -30,7 +30,7 @@ export declare namespace DeviceManualUrls {
30
30
  const Playfield = "manuals/devices/instruments/playfield";
31
31
  const Vaporisateur = "manuals/devices/instruments/vaporisateur";
32
32
  const Neon = "manuals/devices/instruments/neon";
33
- const MIDIOutput = "manuals/devices/instruments/midi-output";
33
+ const MIDIOutput = "manuals/devices/instruments/midioutput";
34
34
  const Soundfont = "manuals/devices/instruments/soundfont";
35
35
  const FrequencySplit = "manuals/devices/audio/frequency-split";
36
36
  }
@@ -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,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,13 @@ 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
15
  DeviceManualUrls.DattorroReverb = "manuals/devices/audio/dattorro-reverb";
16
16
  DeviceManualUrls.Maximizer = "manuals/devices/audio/maximizer";
17
17
  DeviceManualUrls.Compressor = "manuals/devices/audio/compressor";
18
18
  DeviceManualUrls.Gate = "manuals/devices/audio/gate";
19
- DeviceManualUrls.Reverb = "manuals/devices/audio/cheap-reverb";
19
+ DeviceManualUrls.Reverb = "manuals/devices/audio/reverb";
20
20
  DeviceManualUrls.Crusher = "manuals/devices/audio/crusher";
21
21
  DeviceManualUrls.Fold = "manuals/devices/audio/fold";
22
22
  DeviceManualUrls.Tidal = "manuals/devices/audio/tidal";
@@ -35,7 +35,7 @@ export var DeviceManualUrls;
35
35
  DeviceManualUrls.Playfield = "manuals/devices/instruments/playfield";
36
36
  DeviceManualUrls.Vaporisateur = "manuals/devices/instruments/vaporisateur";
37
37
  DeviceManualUrls.Neon = "manuals/devices/instruments/neon";
38
- DeviceManualUrls.MIDIOutput = "manuals/devices/instruments/midi-output";
38
+ DeviceManualUrls.MIDIOutput = "manuals/devices/instruments/midioutput";
39
39
  DeviceManualUrls.Soundfont = "manuals/devices/instruments/soundfont";
40
40
  DeviceManualUrls.FrequencySplit = "manuals/devices/audio/frequency-split";
41
41
  })(DeviceManualUrls || (DeviceManualUrls = {}));
@@ -1,5 +1,5 @@
1
1
  import { Address, PointerTypes, PrimitiveField, PrimitiveValues } from "@opendaw/lib-box";
2
- import { StringMapping, Terminable, unitValue, ValueMapping } from "@opendaw/lib-std";
2
+ import { ObservableValue, StringMapping, Terminable, unitValue, ValueMapping } from "@opendaw/lib-std";
3
3
  import { AutomatableParameterFieldAdapter } from "./AutomatableParameterFieldAdapter";
4
4
  import { BoxAdaptersContext } from "./BoxAdaptersContext";
5
5
  export declare class ParameterAdapterSet implements Terminable {
@@ -8,7 +8,7 @@ export declare class ParameterAdapterSet implements Terminable {
8
8
  terminate(): void;
9
9
  parameters(): ReadonlyArray<AutomatableParameterFieldAdapter>;
10
10
  parameterAt(address: Address): AutomatableParameterFieldAdapter;
11
- createParameter<T extends PrimitiveValues>(field: PrimitiveField<T, PointerTypes>, valueMapping: ValueMapping<T>, stringMapping: StringMapping<T>, name: string, anchor?: unitValue, resetValue?: T): AutomatableParameterFieldAdapter<T>;
11
+ createParameter<T extends PrimitiveValues>(field: PrimitiveField<T, PointerTypes>, valueMapping: ValueMapping<T>, stringMapping: StringMapping<T>, name: string | ObservableValue<string>, anchor?: unitValue, resetValue?: T): AutomatableParameterFieldAdapter<T>;
12
12
  removeParameter<T extends PrimitiveValues>(address: Address): AutomatableParameterFieldAdapter<T>;
13
13
  }
14
14
  //# sourceMappingURL=ParameterAdapterSet.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ParameterAdapterSet.d.ts","sourceRoot":"","sources":["../src/ParameterAdapterSet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,eAAe,EAAC,MAAM,kBAAkB,CAAA;AACvF,OAAO,EAAoB,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAC,MAAM,kBAAkB,CAAA;AACtG,OAAO,EAAC,gCAAgC,EAAC,MAAM,oCAAoC,CAAA;AAEnF,OAAO,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAA;AAEvD,qBAAa,mBAAoB,YAAW,UAAU;;gBAItC,OAAO,EAAE,kBAAkB;IAKvC,SAAS,IAAI,IAAI;IAKjB,UAAU,IAAI,aAAa,CAAC,gCAAgC,CAAC;IAC7D,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,gCAAgC;IAK/D,eAAe,CAAC,CAAC,SAAS,eAAe,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC,EAAE,YAAY,CAAC,EACtC,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,GAAG,gCAAgC,CAAC,CAAC,CAAC;IAQ/F,eAAe,CAAC,CAAC,SAAS,eAAe,EAAE,OAAO,EAAE,OAAO,GAAG,gCAAgC,CAAC,CAAC,CAAC;CAGpG"}
1
+ {"version":3,"file":"ParameterAdapterSet.d.ts","sourceRoot":"","sources":["../src/ParameterAdapterSet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,eAAe,EAAC,MAAM,kBAAkB,CAAA;AACvF,OAAO,EAEH,eAAe,EAEf,aAAa,EACb,UAAU,EACV,SAAS,EACT,YAAY,EACf,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAC,gCAAgC,EAAC,MAAM,oCAAoC,CAAA;AAEnF,OAAO,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAA;AAEvD,qBAAa,mBAAoB,YAAW,UAAU;;gBAItC,OAAO,EAAE,kBAAkB;IAKvC,SAAS,IAAI,IAAI;IAKjB,UAAU,IAAI,aAAa,CAAC,gCAAgC,CAAC;IAC7D,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,gCAAgC;IAK/D,eAAe,CAAC,CAAC,SAAS,eAAe,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC,EAAE,YAAY,CAAC,EACtC,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,GAAG,gCAAgC,CAAC,CAAC,CAAC;IAQ/F,eAAe,CAAC,CAAC,SAAS,eAAe,EAAE,OAAO,EAAE,OAAO,GAAG,gCAAgC,CAAC,CAAC,CAAC;CAGpG"}
@@ -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,CAQnG,CAAA;CAyBJ"}
@@ -0,0 +1,73 @@
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
+ const own = unitOf(context, box);
52
+ if (own.nonEmpty()) {
53
+ return own;
54
+ }
55
+ return resolveOwnerDeviceBox(box).flatMap(owner => unitOf(context, owner));
56
+ };
57
+ const unitOf = (context, box) => context.boxAdapters.optAdapter(box)
58
+ .flatMap(adapter => Devices.isAny(adapter)
59
+ ? Option.wrap(adapter.audioUnitBoxAdapter())
60
+ : Option.None);
61
+ const labelOf = (context, box) => labelFieldOf(context, box).map(field => field.getValue());
62
+ const labelFieldOf = (context, box) => context.boxAdapters.optAdapter(box).flatMap(adapter => "labelField" in adapter && adapter.labelField instanceof StringField
63
+ ? Option.wrap(adapter.labelField)
64
+ : Option.None);
65
+ const resolveOwnerDeviceBox = (box) => {
66
+ for (const [pointer] of box.outgoingEdges()) {
67
+ if (pointer.pointerType === Pointers.Parameter) {
68
+ return pointer.targetVertex.map(vertex => vertex.box);
69
+ }
70
+ }
71
+ return Option.None;
72
+ };
73
+ })(ParameterOwner || (ParameterOwner = {}));
@@ -1 +1 @@
1
- {"version":3,"file":"ScriptCompiler.d.ts","sourceRoot":"","sources":["../src/ScriptCompiler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,OAAO,EAAkB,MAAM,kBAAkB,CAAA;AACvE,OAAO,EAAC,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAC,MAAM,kBAAkB,CAAA;AAC7D,OAAO,EAAC,QAAQ,EAAC,MAAM,uBAAuB,CAAA;AAG9C,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAA;AAqJrC,yBAAiB,cAAc,CAAC;IAC5B,UAAiB,eAAgB,SAAQ,SAAS;QAC9C,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAA;QACxB,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;QAC1B,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;QAC9C,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;KAC3C;IAED,KAAY,MAAM,GAAG;QACjB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;QAC1B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;QAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;KAChC,CAAA;IAKM,MAAM,IAAI,WArDO,cAAc,CAAC,MAAM,QAAQ,MAAM,UAAU,MAAM,YAAY,MAAM,KAAG,MAqDlE,CAAA;IAEvB,MAAM,MAAM,GAAI,QAAQ,MAAM;8BAMP,MAAM,KAAG,MAAM;6BACV,gBAAgB,aAAa,eAAe,KAAG,OAAO,CAAC,IAAI,CAAC;gCAYzD,gBAAgB,WACrB,OAAO,aACL,eAAe,UAClB,MAAM,WACN,OAAO,KAAW,OAAO,CAAC,IAAI,CAAC;KA2B9D,CAAA;CACJ"}
1
+ {"version":3,"file":"ScriptCompiler.d.ts","sourceRoot":"","sources":["../src/ScriptCompiler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,OAAO,EAAkB,MAAM,kBAAkB,CAAA;AACvE,OAAO,EAAC,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAC,MAAM,kBAAkB,CAAA;AAC7D,OAAO,EAAC,QAAQ,EAAC,MAAM,uBAAuB,CAAA;AAG9C,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAA;AAuJrC,yBAAiB,cAAc,CAAC;IAC5B,UAAiB,eAAgB,SAAQ,SAAS;QAC9C,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAA;QACxB,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;QAC1B,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;QAC9C,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;KAC3C;IAED,KAAY,MAAM,GAAG;QACjB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;QAC1B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;QAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;KAChC,CAAA;IAKM,MAAM,IAAI,WAtDO,cAAc,CAAC,MAAM,QAAQ,MAAM,UAAU,MAAM,YAAY,MAAM,KAAG,MAsDlE,CAAA;IAEvB,MAAM,MAAM,GAAI,QAAQ,MAAM;8BAMP,MAAM,KAAG,MAAM;6BACV,gBAAgB,aAAa,eAAe,KAAG,OAAO,CAAC,IAAI,CAAC;gCAYzD,gBAAgB,WACrB,OAAO,aACL,eAAe,UAClB,MAAM,WACN,OAAO,KAAW,OAAO,CAAC,IAAI,CAAC;KA2B9D,CAAA;CACJ"}
@@ -113,7 +113,8 @@ const reconcileSamples = (deviceBox, declared, order) => {
113
113
  }
114
114
  };
115
115
  // Wrap the user script for registration into `globalThis.openDAW.<registry>[uuid]`. Beyond `{update, create}`
116
- // (consumed by the TS core-processors engine), the entry also carries the PARSED `@param` / `@sample`
116
+ // (consumed by the TS core-processors engine), the entry also carries the `@no-pass` verdict (`pass`, read by
117
+ // the Spielwerk bridge) plus the PARSED `@param` / `@sample`
117
118
  // declarations (with their declaration index, matching the `WerkstattParameterBox.index` the engine keys by):
118
119
  // the WASM script bridge needs them to map a param's raw automation value through the right `ValueMapping` and
119
120
  // to label each param / sample, since the worklet has no box graph to read those from. The TS engine ignores
@@ -137,7 +138,8 @@ const wrapScript = (config, uuid, update, userCode) => {
137
138
  return Processor
138
139
  })(),
139
140
  params: ${JSON.stringify(params)},
140
- samples: ${JSON.stringify(samples)}
141
+ samples: ${JSON.stringify(samples)},
142
+ pass: ${ScriptDeclaration.parsePassThrough(userCode)}
141
143
  }
142
144
  `;
143
145
  };
@@ -32,6 +32,7 @@ export interface DeclarationSection {
32
32
  export declare namespace ScriptDeclaration {
33
33
  export const isEqual: (a: ParamDeclaration, b: ParamDeclaration) => boolean;
34
34
  export const parseLabel: (code: string) => Option<string>;
35
+ export const parsePassThrough: (code: string) => boolean;
35
36
  export const parseParams: (code: string) => ReadonlyArray<ParamDeclaration>;
36
37
  export const parseSamples: (code: string) => ReadonlyArray<SampleDeclaration>;
37
38
  export const parseDeclarationOrder: (code: string) => Map<string, number>;
@@ -1 +1 @@
1
- {"version":3,"file":"ScriptDeclaration.d.ts","sourceRoot":"","sources":["../src/ScriptDeclaration.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ScriptDeclaration.d.ts","sourceRoot":"","sources":["../src/ScriptDeclaration.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { asInstanceOf, isDefined, Notifier, Option, StringMapping, Terminable, ValueMapping } from "@opendaw/lib-std";
1
+ import { asInstanceOf, isDefined, Notifier, Option, StringMapping, Strings, Terminable, ValueMapping } from "@opendaw/lib-std";
2
2
  import { WerkstattParameterBox } from "@opendaw/studio-boxes";
3
3
  const LABEL_LINE = /^\/\/ @label .+$/m;
4
4
  const PARAM_LINE = /^\/\/ @param .+$/gm;
@@ -6,6 +6,7 @@ const SAMPLE_LINE = /^\/\/ @sample .+$/gm;
6
6
  const GROUP_LINE = /^\/\/ @group .+$/gm;
7
7
  const DIRECTIVE_LINE = /^\/\/ @(group|param|sample) .+$/gm;
8
8
  const DECLARATION_LINE = /^\/\/ @(?:param|sample) \S+/gm;
9
+ const NO_PASS_LINE = /^\/\/ @no-pass\b(.*)$/m;
9
10
  const FLOAT_TOLERANCE = 1e-6;
10
11
  const VALID_MAPPINGS = ["linear", "exp", "int", "bool"];
11
12
  const BoolStringMapping = new class {
@@ -94,6 +95,18 @@ export var ScriptDeclaration;
94
95
  }
95
96
  return Option.wrap(label);
96
97
  };
98
+ // A note transformer forwards its input VERBATIM unless the script opts out with `// @no-pass`, so a device
99
+ // with no (or a broken) script never eats the note stream.
100
+ ScriptDeclaration.parsePassThrough = (code) => {
101
+ const match = NO_PASS_LINE.exec(code);
102
+ if (match === null) {
103
+ return true;
104
+ }
105
+ if (match[1].trim().length > 0) {
106
+ throw new Error("Malformed @no-pass: expected: // @no-pass");
107
+ }
108
+ return false;
109
+ };
97
110
  ScriptDeclaration.parseParams = (code) => {
98
111
  const params = [];
99
112
  let match;
@@ -212,7 +225,9 @@ export var ScriptDeclaration;
212
225
  valueMapping: ValueMapping.unipolar(),
213
226
  stringMapping: StringMapping.percent({ fractionDigits: 1 })
214
227
  };
215
- parametric.createParameter(paramBox.value, valueMapping, stringMapping, label, undefined, paramBox.defaultValue.getValue());
228
+ // Script authors write `@param` names in any case they like. The stored label stays verbatim
229
+ // (ScriptCompiler keys parameter boxes by it), only the displayed name is normalised.
230
+ parametric.createParameter(paramBox.value, valueMapping, stringMapping, Strings.capitalize(label), undefined, paramBox.defaultValue.getValue());
216
231
  if (isDefined(declaration)) {
217
232
  cachedDeclarations.set(label, declaration);
218
233
  }
@@ -225,17 +240,17 @@ export var ScriptDeclaration;
225
240
  }), codeField.subscribe(() => {
226
241
  const declarations = ScriptDeclaration.parseParams(codeField.getValue());
227
242
  for (const adapter of parametric.parameters()) {
228
- const newDeclaration = declarations.find(decl => decl.label === adapter.name);
243
+ const newDeclaration = declarations.find(decl => Strings.capitalize(decl.label) === adapter.name);
229
244
  if (!isDefined(newDeclaration)) {
230
245
  continue;
231
246
  }
232
- const oldDeclaration = cachedDeclarations.get(adapter.name);
247
+ const oldDeclaration = cachedDeclarations.get(newDeclaration.label);
233
248
  if (isDefined(oldDeclaration) && declarationEquals(oldDeclaration, newDeclaration)) {
234
249
  continue;
235
250
  }
236
251
  const { valueMapping, stringMapping } = ScriptDeclaration.resolveParamMappings(newDeclaration);
237
252
  adapter.updateMappings(valueMapping, stringMapping);
238
- cachedDeclarations.set(adapter.name, newDeclaration);
253
+ cachedDeclarations.set(newDeclaration.label, newDeclaration);
239
254
  }
240
255
  codeChangedNotifier.notify();
241
256
  }), codeChangedNotifier);
@@ -126,10 +126,10 @@ export class AudioUnitBoxAdapter {
126
126
  }
127
127
  _a = AudioUnitBoxAdapter, _AudioUnitBoxAdapter_terminator = new WeakMap(), _AudioUnitBoxAdapter_context = new WeakMap(), _AudioUnitBoxAdapter_box = new WeakMap(), _AudioUnitBoxAdapter_parametric = new WeakMap(), _AudioUnitBoxAdapter_tracks = new WeakMap(), _AudioUnitBoxAdapter_input = new WeakMap(), _AudioUnitBoxAdapter_midiEffects = new WeakMap(), _AudioUnitBoxAdapter_audioEffects = new WeakMap(), _AudioUnitBoxAdapter_auxSends = new WeakMap(), _AudioUnitBoxAdapter_output = new WeakMap(), _AudioUnitBoxAdapter_instances = new WeakSet(), _AudioUnitBoxAdapter_wrapParameters = function _AudioUnitBoxAdapter_wrapParameters(box) {
128
128
  return {
129
- volume: __classPrivateFieldGet(this, _AudioUnitBoxAdapter_parametric, "f").createParameter(box.volume, _a.VolumeMapper, StringMapping.decible, "volume"),
130
- panning: __classPrivateFieldGet(this, _AudioUnitBoxAdapter_parametric, "f").createParameter(box.panning, ValueMapping.bipolar(), StringMapping.panning, "panning", 0.5),
131
- mute: __classPrivateFieldGet(this, _AudioUnitBoxAdapter_parametric, "f").createParameter(box.mute, ValueMapping.bool, StringMapping.bool, "mute"),
132
- solo: __classPrivateFieldGet(this, _AudioUnitBoxAdapter_parametric, "f").createParameter(box.solo, ValueMapping.bool, StringMapping.bool, "solo")
129
+ volume: __classPrivateFieldGet(this, _AudioUnitBoxAdapter_parametric, "f").createParameter(box.volume, _a.VolumeMapper, StringMapping.decible, "Volume"),
130
+ panning: __classPrivateFieldGet(this, _AudioUnitBoxAdapter_parametric, "f").createParameter(box.panning, ValueMapping.bipolar(), StringMapping.panning, "Panning", 0.5),
131
+ mute: __classPrivateFieldGet(this, _AudioUnitBoxAdapter_parametric, "f").createParameter(box.mute, ValueMapping.bool, StringMapping.bool, "Mute"),
132
+ solo: __classPrivateFieldGet(this, _AudioUnitBoxAdapter_parametric, "f").createParameter(box.solo, ValueMapping.bool, StringMapping.bool, "Solo")
133
133
  };
134
134
  }, _AudioUnitBoxAdapter_sanityCheck = function _AudioUnitBoxAdapter_sanityCheck() {
135
135
  const address = this.address.toString();
@@ -51,19 +51,19 @@ export class DelayDeviceBoxAdapter {
51
51
  }
52
52
  _a = DelayDeviceBoxAdapter, _DelayDeviceBoxAdapter_context = new WeakMap(), _DelayDeviceBoxAdapter_box = new WeakMap(), _DelayDeviceBoxAdapter_parametric = new WeakMap(), _DelayDeviceBoxAdapter_instances = new WeakSet(), _DelayDeviceBoxAdapter_wrapParameters = function _DelayDeviceBoxAdapter_wrapParameters(box) {
53
53
  return {
54
- preSyncTimeLeft: __classPrivateFieldGet(this, _DelayDeviceBoxAdapter_parametric, "f").createParameter(box.preSyncTimeLeft, ValueMapping.linearInteger(0, _a.Fractions.length - 1), _a.FractionsStringMapping, "pre sync L"),
55
- preMillisTimeLeft: __classPrivateFieldGet(this, _DelayDeviceBoxAdapter_parametric, "f").createParameter(box.preMillisTimeLeft, ValueMapping.powerByCenter(100.0, 0.0, _a.MAX_MILLIS_TIME), StringMapping.numeric({ unit: "ms", fractionDigits: 1 }), "pre ms L"),
56
- preSyncTimeRight: __classPrivateFieldGet(this, _DelayDeviceBoxAdapter_parametric, "f").createParameter(box.preSyncTimeRight, ValueMapping.linearInteger(0, _a.Fractions.length - 1), _a.FractionsStringMapping, "pre sync R"),
57
- preMillisTimeRight: __classPrivateFieldGet(this, _DelayDeviceBoxAdapter_parametric, "f").createParameter(box.preMillisTimeRight, ValueMapping.powerByCenter(100.0, 0.0, _a.MAX_MILLIS_TIME), StringMapping.numeric({ unit: "ms", fractionDigits: 1 }), "pre ms R"),
58
- delay: __classPrivateFieldGet(this, _DelayDeviceBoxAdapter_parametric, "f").createParameter(box.delayMusical, ValueMapping.linearInteger(0, _a.Fractions.length - 1), _a.FractionsStringMapping, "delay"),
59
- millisTime: __classPrivateFieldGet(this, _DelayDeviceBoxAdapter_parametric, "f").createParameter(box.delayMillis, ValueMapping.powerByCenter(100.0, 0.0, _a.MAX_MILLIS_TIME), StringMapping.numeric({ unit: "ms", fractionDigits: 1 }), "ms"),
60
- feedback: __classPrivateFieldGet(this, _DelayDeviceBoxAdapter_parametric, "f").createParameter(box.feedback, ValueMapping.unipolar(), StringMapping.numeric({ unit: "%", fractionDigits: 0 }), "feedback"),
61
- cross: __classPrivateFieldGet(this, _DelayDeviceBoxAdapter_parametric, "f").createParameter(box.cross, ValueMapping.unipolar(), StringMapping.numeric({ unit: "%", fractionDigits: 0 }), "cross"),
62
- lfoSpeed: __classPrivateFieldGet(this, _DelayDeviceBoxAdapter_parametric, "f").createParameter(box.lfoSpeed, ValueMapping.exponential(_a.LFO_SPEED_MIN, _a.LFO_SPEED_MAX), StringMapping.numeric({ unit: "Hz", fractionDigits: 2 }), "lfo speed"),
63
- lfoDepth: __classPrivateFieldGet(this, _DelayDeviceBoxAdapter_parametric, "f").createParameter(box.lfoDepth, ValueMapping.power(4.0, 0.0, _a.LFO_DEPTH_MAX), StringMapping.numeric({ unit: "ms", fractionDigits: 1 }), "lfo depth"),
64
- filter: __classPrivateFieldGet(this, _DelayDeviceBoxAdapter_parametric, "f").createParameter(box.filter, ValueMapping.bipolar(), StringMapping.numeric({ unit: "%", fractionDigits: 0 }), "filter", 0.5),
65
- dry: __classPrivateFieldGet(this, _DelayDeviceBoxAdapter_parametric, "f").createParameter(box.dry, ValueMapping.DefaultDecibel, StringMapping.numeric({ unit: "db", fractionDigits: 1 }), "dry"),
66
- wet: __classPrivateFieldGet(this, _DelayDeviceBoxAdapter_parametric, "f").createParameter(box.wet, ValueMapping.DefaultDecibel, StringMapping.numeric({ unit: "db", fractionDigits: 1 }), "wet")
54
+ preSyncTimeLeft: __classPrivateFieldGet(this, _DelayDeviceBoxAdapter_parametric, "f").createParameter(box.preSyncTimeLeft, ValueMapping.linearInteger(0, _a.Fractions.length - 1), _a.FractionsStringMapping, "Pre Sync L"),
55
+ preMillisTimeLeft: __classPrivateFieldGet(this, _DelayDeviceBoxAdapter_parametric, "f").createParameter(box.preMillisTimeLeft, ValueMapping.powerByCenter(100.0, 0.0, _a.MAX_MILLIS_TIME), StringMapping.numeric({ unit: "ms", fractionDigits: 1 }), "Pre MS L"),
56
+ preSyncTimeRight: __classPrivateFieldGet(this, _DelayDeviceBoxAdapter_parametric, "f").createParameter(box.preSyncTimeRight, ValueMapping.linearInteger(0, _a.Fractions.length - 1), _a.FractionsStringMapping, "Pre Sync R"),
57
+ preMillisTimeRight: __classPrivateFieldGet(this, _DelayDeviceBoxAdapter_parametric, "f").createParameter(box.preMillisTimeRight, ValueMapping.powerByCenter(100.0, 0.0, _a.MAX_MILLIS_TIME), StringMapping.numeric({ unit: "ms", fractionDigits: 1 }), "Pre MS R"),
58
+ delay: __classPrivateFieldGet(this, _DelayDeviceBoxAdapter_parametric, "f").createParameter(box.delayMusical, ValueMapping.linearInteger(0, _a.Fractions.length - 1), _a.FractionsStringMapping, "Delay"),
59
+ millisTime: __classPrivateFieldGet(this, _DelayDeviceBoxAdapter_parametric, "f").createParameter(box.delayMillis, ValueMapping.powerByCenter(100.0, 0.0, _a.MAX_MILLIS_TIME), StringMapping.numeric({ unit: "ms", fractionDigits: 1 }), "MS"),
60
+ feedback: __classPrivateFieldGet(this, _DelayDeviceBoxAdapter_parametric, "f").createParameter(box.feedback, ValueMapping.unipolar(), StringMapping.numeric({ unit: "%", fractionDigits: 0 }), "Feedback"),
61
+ cross: __classPrivateFieldGet(this, _DelayDeviceBoxAdapter_parametric, "f").createParameter(box.cross, ValueMapping.unipolar(), StringMapping.numeric({ unit: "%", fractionDigits: 0 }), "Cross"),
62
+ lfoSpeed: __classPrivateFieldGet(this, _DelayDeviceBoxAdapter_parametric, "f").createParameter(box.lfoSpeed, ValueMapping.exponential(_a.LFO_SPEED_MIN, _a.LFO_SPEED_MAX), StringMapping.numeric({ unit: "Hz", fractionDigits: 2 }), "LFO Speed"),
63
+ lfoDepth: __classPrivateFieldGet(this, _DelayDeviceBoxAdapter_parametric, "f").createParameter(box.lfoDepth, ValueMapping.power(4.0, 0.0, _a.LFO_DEPTH_MAX), StringMapping.numeric({ unit: "ms", fractionDigits: 1 }), "LFO Depth"),
64
+ filter: __classPrivateFieldGet(this, _DelayDeviceBoxAdapter_parametric, "f").createParameter(box.filter, ValueMapping.bipolar(), StringMapping.numeric({ unit: "%", fractionDigits: 0 }), "Filter", 0.5),
65
+ dry: __classPrivateFieldGet(this, _DelayDeviceBoxAdapter_parametric, "f").createParameter(box.dry, ValueMapping.DefaultDecibel, StringMapping.numeric({ unit: "db", fractionDigits: 1 }), "Dry"),
66
+ wet: __classPrivateFieldGet(this, _DelayDeviceBoxAdapter_parametric, "f").createParameter(box.wet, ValueMapping.DefaultDecibel, StringMapping.numeric({ unit: "db", fractionDigits: 1 }), "Wet")
67
67
  };
68
68
  };
69
69
  DelayDeviceBoxAdapter.Fractions = Fraction.builder()
@@ -68,8 +68,8 @@ export class NeuralAmpDeviceBoxAdapter {
68
68
  }
69
69
  _NeuralAmpDeviceBoxAdapter_context = new WeakMap(), _NeuralAmpDeviceBoxAdapter_box = new WeakMap(), _NeuralAmpDeviceBoxAdapter_parametric = new WeakMap(), _NeuralAmpDeviceBoxAdapter_instances = new WeakSet(), _NeuralAmpDeviceBoxAdapter_wrapParameters = function _NeuralAmpDeviceBoxAdapter_wrapParameters(box) {
70
70
  return {
71
- inputGain: __classPrivateFieldGet(this, _NeuralAmpDeviceBoxAdapter_parametric, "f").createParameter(box.inputGain, ValueMapping.decibel(-72.0, 0.0, 12.0), StringMapping.numeric({ unit: "dB", fractionDigits: 1 }), "input"),
72
- outputGain: __classPrivateFieldGet(this, _NeuralAmpDeviceBoxAdapter_parametric, "f").createParameter(box.outputGain, ValueMapping.decibel(-72.0, 0.0, 12.0), StringMapping.numeric({ unit: "dB", fractionDigits: 1 }), "output"),
71
+ inputGain: __classPrivateFieldGet(this, _NeuralAmpDeviceBoxAdapter_parametric, "f").createParameter(box.inputGain, ValueMapping.decibel(-72.0, 0.0, 12.0), StringMapping.numeric({ unit: "dB", fractionDigits: 1 }), "Input"),
72
+ outputGain: __classPrivateFieldGet(this, _NeuralAmpDeviceBoxAdapter_parametric, "f").createParameter(box.outputGain, ValueMapping.decibel(-72.0, 0.0, 12.0), StringMapping.numeric({ unit: "dB", fractionDigits: 1 }), "Output"),
73
73
  mix: __classPrivateFieldGet(this, _NeuralAmpDeviceBoxAdapter_parametric, "f").createParameter(box.mix, ValueMapping.linear(0.0, 1.0), StringMapping.percent(), "Mix")
74
74
  };
75
75
  };
@@ -65,19 +65,19 @@ const GainMapping = ValueMapping.linear(-24.0, 24.0);
65
65
  const QMapping = ValueMapping.exponential(0.01, 10.0);
66
66
  const createPass = (parametric, pass, name) => {
67
67
  return ({
68
- enabled: parametric.createParameter(pass.enabled, ValueMapping.bool, StringMapping.bool, "enabled"),
68
+ enabled: parametric.createParameter(pass.enabled, ValueMapping.bool, StringMapping.bool, "Enabled"),
69
69
  frequency: parametric.createParameter(pass.frequency, FrequencyMapping, StringMapping.numeric({ unit: "Hz", fractionDigits: 0 }), `${name} Freq`),
70
70
  order: parametric.createParameter(pass.order, ValueMapping.linearInteger(0, 3), StringMapping.indices("db", ["12", "24", "36", "48"]), `${name} Order`),
71
71
  q: parametric.createParameter(pass.q, QMapping, StringMapping.numeric({ fractionDigits: 3 }), `${name} Q`)
72
72
  });
73
73
  };
74
74
  const createShelf = (parametric, shelf, name) => ({
75
- enabled: parametric.createParameter(shelf.enabled, ValueMapping.bool, StringMapping.bool, "enabled"),
75
+ enabled: parametric.createParameter(shelf.enabled, ValueMapping.bool, StringMapping.bool, "Enabled"),
76
76
  frequency: parametric.createParameter(shelf.frequency, FrequencyMapping, StringMapping.numeric({ unit: "Hz", fractionDigits: 0 }), `${name} Freq`),
77
77
  gain: parametric.createParameter(shelf.gain, GainMapping, StringMapping.numeric({ unit: "db", fractionDigits: 1, bipolar: true }), `${name} Gain`, 0.5)
78
78
  });
79
79
  const createBell = (parametric, bell, name) => ({
80
- enabled: parametric.createParameter(bell.enabled, ValueMapping.bool, StringMapping.bool, "enabled"),
80
+ enabled: parametric.createParameter(bell.enabled, ValueMapping.bool, StringMapping.bool, "Enabled"),
81
81
  frequency: parametric.createParameter(bell.frequency, FrequencyMapping, StringMapping.numeric({ unit: "Hz", fractionDigits: 0 }), `${name} Freq`),
82
82
  gain: parametric.createParameter(bell.gain, GainMapping, StringMapping.numeric({ unit: "db", fractionDigits: 1, bipolar: true }), `${name} Gain`, 0.5),
83
83
  q: parametric.createParameter(bell.q, QMapping, StringMapping.numeric({ fractionDigits: 3 }), `${name} Q`)
@@ -10,7 +10,7 @@ export declare class ReverbDeviceBoxAdapter implements AudioEffectDeviceAdapter
10
10
  #private;
11
11
  readonly type = "audio-effect";
12
12
  readonly accepts = "audio";
13
- readonly manualUrl = "manuals/devices/audio/cheap-reverb";
13
+ readonly manualUrl = "manuals/devices/audio/reverb";
14
14
  readonly namedParameter: {
15
15
  readonly decay: import("../..").AutomatableParameterFieldAdapter<number>;
16
16
  readonly preDelay: import("../..").AutomatableParameterFieldAdapter<number>;
@@ -1 +1 @@
1
- {"version":3,"file":"ReverbDeviceBoxAdapter.d.ts","sourceRoot":"","sources":["../../../src/devices/audio-effects/ReverbDeviceBoxAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAwB,IAAI,EAAe,MAAM,kBAAkB,CAAA;AAC1E,OAAO,EAAC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAC,MAAM,kBAAkB,CAAA;AAC7F,OAAO,EAAC,QAAQ,EAAC,MAAM,uBAAuB,CAAA;AAC9C,OAAO,EAAC,wBAAwB,EAAE,UAAU,EAAU,MAAM,qBAAqB,CAAA;AACjF,OAAO,EAAC,kBAAkB,EAAC,MAAM,gCAAgC,CAAA;AACjE,OAAO,EAAC,kBAAkB,EAAC,MAAM,0BAA0B,CAAA;AAG3D,OAAO,EAAC,mBAAmB,EAAC,MAAM,sCAAsC,CAAA;AAExE,qBAAa,sBAAuB,YAAW,wBAAwB;;IACnE,QAAQ,CAAC,IAAI,kBAAiB;IAC9B,QAAQ,CAAC,OAAO,WAAU;IAC1B,QAAQ,CAAC,SAAS,wCAA0B;IAK5C,QAAQ,CAAC,cAAc;;;;;;;MAAA;gBAEX,OAAO,EAAE,kBAAkB,EAAE,GAAG,EAAE,eAAe;IAO7D,IAAI,GAAG,IAAI,eAAe,CAAmB;IAC7C,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,UAAU,IAAI,UAAU;IAKxB,mBAAmB,IAAI,mBAAmB;IAEzC,mBAAmB,IAAI,QAAQ,CAAC,kBAAkB,CAAC;IAIpD,SAAS,IAAI,IAAI;CAwCpB"}
1
+ {"version":3,"file":"ReverbDeviceBoxAdapter.d.ts","sourceRoot":"","sources":["../../../src/devices/audio-effects/ReverbDeviceBoxAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAwB,IAAI,EAAe,MAAM,kBAAkB,CAAA;AAC1E,OAAO,EAAC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAC,MAAM,kBAAkB,CAAA;AAC7F,OAAO,EAAC,QAAQ,EAAC,MAAM,uBAAuB,CAAA;AAC9C,OAAO,EAAC,wBAAwB,EAAE,UAAU,EAAU,MAAM,qBAAqB,CAAA;AACjF,OAAO,EAAC,kBAAkB,EAAC,MAAM,gCAAgC,CAAA;AACjE,OAAO,EAAC,kBAAkB,EAAC,MAAM,0BAA0B,CAAA;AAG3D,OAAO,EAAC,mBAAmB,EAAC,MAAM,sCAAsC,CAAA;AAExE,qBAAa,sBAAuB,YAAW,wBAAwB;;IACnE,QAAQ,CAAC,IAAI,kBAAiB;IAC9B,QAAQ,CAAC,OAAO,WAAU;IAC1B,QAAQ,CAAC,SAAS,kCAA0B;IAK5C,QAAQ,CAAC,cAAc;;;;;;;MAAA;gBAEX,OAAO,EAAE,kBAAkB,EAAE,GAAG,EAAE,eAAe;IAO7D,IAAI,GAAG,IAAI,eAAe,CAAmB;IAC7C,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,UAAU,IAAI,UAAU;IAKxB,mBAAmB,IAAI,mBAAmB;IAEzC,mBAAmB,IAAI,QAAQ,CAAC,kBAAkB,CAAC;IAIpD,SAAS,IAAI,IAAI;CAwCpB"}
@@ -54,9 +54,9 @@ _ReverbDeviceBoxAdapter_context = new WeakMap(), _ReverbDeviceBoxAdapter_box = n
54
54
  preDelay: __classPrivateFieldGet(this, _ReverbDeviceBoxAdapter_parametric, "f").createParameter(box.preDelay, ValueMapping.exponential(0.001, 0.500), StringMapping.numeric({
55
55
  unit: "s", fractionDigits: 1, unitPrefix: true
56
56
  }), "Pre-Delay"),
57
- damp: __classPrivateFieldGet(this, _ReverbDeviceBoxAdapter_parametric, "f").createParameter(box.damp, ValueMapping.unipolar(), StringMapping.numeric({ unit: "%", fractionDigits: 0 }), "damping"),
58
- filter: __classPrivateFieldGet(this, _ReverbDeviceBoxAdapter_parametric, "f").createParameter(box.filter, ValueMapping.bipolar(), StringMapping.numeric({ unit: "%", fractionDigits: 0 }), "filter"),
59
- dry: __classPrivateFieldGet(this, _ReverbDeviceBoxAdapter_parametric, "f").createParameter(box.dry, ValueMapping.DefaultDecibel, StringMapping.numeric({ unit: "db", fractionDigits: 1 }), "dry"),
60
- wet: __classPrivateFieldGet(this, _ReverbDeviceBoxAdapter_parametric, "f").createParameter(box.wet, ValueMapping.DefaultDecibel, StringMapping.numeric({ unit: "db", fractionDigits: 1 }), "wet")
57
+ damp: __classPrivateFieldGet(this, _ReverbDeviceBoxAdapter_parametric, "f").createParameter(box.damp, ValueMapping.unipolar(), StringMapping.numeric({ unit: "%", fractionDigits: 0 }), "Damping"),
58
+ filter: __classPrivateFieldGet(this, _ReverbDeviceBoxAdapter_parametric, "f").createParameter(box.filter, ValueMapping.bipolar(), StringMapping.numeric({ unit: "%", fractionDigits: 0 }), "Filter"),
59
+ dry: __classPrivateFieldGet(this, _ReverbDeviceBoxAdapter_parametric, "f").createParameter(box.dry, ValueMapping.DefaultDecibel, StringMapping.numeric({ unit: "db", fractionDigits: 1 }), "Dry"),
60
+ wet: __classPrivateFieldGet(this, _ReverbDeviceBoxAdapter_parametric, "f").createParameter(box.wet, ValueMapping.DefaultDecibel, StringMapping.numeric({ unit: "db", fractionDigits: 1 }), "Wet")
61
61
  };
62
62
  };
@@ -10,7 +10,7 @@ export declare class StereoToolDeviceBoxAdapter implements AudioEffectDeviceAdap
10
10
  #private;
11
11
  readonly type = "audio-effect";
12
12
  readonly accepts = "audio";
13
- readonly manualUrl = "manuals/devices/audio/stereo-tool";
13
+ readonly manualUrl = "manuals/devices/audio/stereotool";
14
14
  readonly namedParameter: {
15
15
  readonly volume: import("../..").AutomatableParameterFieldAdapter<number>;
16
16
  readonly panning: import("../..").AutomatableParameterFieldAdapter<number>;
@@ -1 +1 @@
1
- {"version":3,"file":"StereoToolDeviceBoxAdapter.d.ts","sourceRoot":"","sources":["../../../src/devices/audio-effects/StereoToolDeviceBoxAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,IAAI,EAAe,MAAM,kBAAkB,CAAA;AAC1E,OAAO,EAAC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAC,MAAM,kBAAkB,CAAA;AAC7F,OAAO,EAAC,mBAAmB,EAAC,MAAM,uBAAuB,CAAA;AACzD,OAAO,EAAC,QAAQ,EAAC,MAAM,uBAAuB,CAAA;AAC9C,OAAO,EAAC,wBAAwB,EAAE,UAAU,EAAU,MAAM,qBAAqB,CAAA;AACjF,OAAO,EAAC,kBAAkB,EAAC,MAAM,gCAAgC,CAAA;AACjE,OAAO,EAAC,kBAAkB,EAAC,MAAM,0BAA0B,CAAA;AAG3D,OAAO,EAAC,mBAAmB,EAAC,MAAM,sCAAsC,CAAA;AAExE,qBAAa,0BAA2B,YAAW,wBAAwB;;IACvE,QAAQ,CAAC,IAAI,kBAAiB;IAC9B,QAAQ,CAAC,OAAO,WAAU;IAC1B,QAAQ,CAAC,SAAS,uCAA8B;IAMhD,QAAQ,CAAC,cAAc;;;;;;;MAAA;gBAEX,OAAO,EAAE,kBAAkB,EAAE,GAAG,EAAE,mBAAmB;IAOjE,IAAI,GAAG,IAAI,mBAAmB,CAAmB;IACjD,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,UAAU,IAAI,UAAU;IAKxB,mBAAmB,IAAI,mBAAmB;IAEzC,mBAAmB,IAAI,QAAQ,CAAC,kBAAkB,CAAC;IAIpD,SAAS,IAAI,IAAI;CAqBpB"}
1
+ {"version":3,"file":"StereoToolDeviceBoxAdapter.d.ts","sourceRoot":"","sources":["../../../src/devices/audio-effects/StereoToolDeviceBoxAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,IAAI,EAAe,MAAM,kBAAkB,CAAA;AAC1E,OAAO,EAAC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAC,MAAM,kBAAkB,CAAA;AAC7F,OAAO,EAAC,mBAAmB,EAAC,MAAM,uBAAuB,CAAA;AACzD,OAAO,EAAC,QAAQ,EAAC,MAAM,uBAAuB,CAAA;AAC9C,OAAO,EAAC,wBAAwB,EAAE,UAAU,EAAU,MAAM,qBAAqB,CAAA;AACjF,OAAO,EAAC,kBAAkB,EAAC,MAAM,gCAAgC,CAAA;AACjE,OAAO,EAAC,kBAAkB,EAAC,MAAM,0BAA0B,CAAA;AAG3D,OAAO,EAAC,mBAAmB,EAAC,MAAM,sCAAsC,CAAA;AAExE,qBAAa,0BAA2B,YAAW,wBAAwB;;IACvE,QAAQ,CAAC,IAAI,kBAAiB;IAC9B,QAAQ,CAAC,OAAO,WAAU;IAC1B,QAAQ,CAAC,SAAS,sCAA8B;IAMhD,QAAQ,CAAC,cAAc;;;;;;;MAAA;gBAEX,OAAO,EAAE,kBAAkB,EAAE,GAAG,EAAE,mBAAmB;IAOjE,IAAI,GAAG,IAAI,mBAAmB,CAAmB;IACjD,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,UAAU,IAAI,UAAU;IAKxB,mBAAmB,IAAI,mBAAmB;IAEzC,mBAAmB,IAAI,QAAQ,CAAC,kBAAkB,CAAC;IAIpD,SAAS,IAAI,IAAI;CAqBpB"}
@@ -52,7 +52,7 @@ _StereoToolDeviceBoxAdapter_context = new WeakMap(), _StereoToolDeviceBoxAdapter
52
52
  return {
53
53
  volume: __classPrivateFieldGet(this, _StereoToolDeviceBoxAdapter_parametric, "f").createParameter(box.volume, ValueMapping.decibel(-72.0, 0.0, 12.0), StringMapping.numeric({ unit: "db", fractionDigits: 1 }), "Volume"),
54
54
  panning: __classPrivateFieldGet(this, _StereoToolDeviceBoxAdapter_parametric, "f").createParameter(box.panning, ValueMapping.bipolar(), StringMapping.panning, "Panning", 0.5),
55
- stereo: __classPrivateFieldGet(this, _StereoToolDeviceBoxAdapter_parametric, "f").createParameter(box.stereo, ValueMapping.bipolar(), StringMapping.numeric({ unit: "%", fractionDigits: 0 }), "stereo", 0.5),
55
+ stereo: __classPrivateFieldGet(this, _StereoToolDeviceBoxAdapter_parametric, "f").createParameter(box.stereo, ValueMapping.bipolar(), StringMapping.numeric({ unit: "%", fractionDigits: 0 }), "Stereo", 0.5),
56
56
  invertL: __classPrivateFieldGet(this, _StereoToolDeviceBoxAdapter_parametric, "f").createParameter(box.invertL, ValueMapping.bool, StringMapping.bool, "Invert Left"),
57
57
  invertR: __classPrivateFieldGet(this, _StereoToolDeviceBoxAdapter_parametric, "f").createParameter(box.invertR, ValueMapping.bool, StringMapping.bool, "Invert Right"),
58
58
  swap: __classPrivateFieldGet(this, _StereoToolDeviceBoxAdapter_parametric, "f").createParameter(box.swap, ValueMapping.bool, StringMapping.bool, "Swap")
@@ -0,0 +1,42 @@
1
+ import { int } from "@opendaw/lib-std";
2
+ import { CubedStep } from "./CubedStep";
3
+ /**
4
+ * Reader for AudioRealism ABL `.pat` files (the pattern library shipped with ABL2 / ABL3).
5
+ *
6
+ * Plain text: comment lines starting with `;` carry the meta header, every other non-empty line is
7
+ * one step. Two dialects exist in the same library and both appear in the factory folders:
8
+ *
9
+ * ABL3 `10 0 1 0 1 1` pitch down up accent slide gate
10
+ * ABL2 `a#3 1 0 1` note gate accent slide (octave lives in the note name, so the
11
+ * down/up flags are absent)
12
+ *
13
+ * The ABL3 order is VERIFIED, not guessed: `userlab.pat` was loaded into the plugin and the
14
+ * resulting pattern bank dumped, and all 16 steps line up only under this order. Note that GATE
15
+ * COMES LAST and does NOT match the order of the same fields in the plugin's own state XML
16
+ * (pitch gate down up accent slide) - reading the file in XML order silently swaps gate with the
17
+ * octave flags, which loads as a transposed pattern full of wrong rests.
18
+ *
19
+ * The two dialects do NOT agree on where gate goes: ABL2 puts it FIRST. That is measured, not
20
+ * assumed - across the 238 ABL2 factory files, reading gate as the last column leaves 13 patterns
21
+ * completely silent and finds only 1415 gated steps, while reading it as the first finds 5664 and
22
+ * no silent pattern at all.
23
+ *
24
+ * Which of the remaining two columns is accent and which is slide is still inference: they occur at
25
+ * near-identical rates (22% vs 24% of gated steps) and both are followed by a gated step ~93% of the
26
+ * time, so the data cannot separate them. The order here follows ABL3, where accent precedes slide.
27
+ */
28
+ export type AblPattern = {
29
+ steps: ReadonlyArray<CubedStep>;
30
+ length: int;
31
+ };
32
+ export declare namespace AblPattern {
33
+ /**
34
+ * MIDI note for the plugin's pitch 0. VERIFIED twice against captured plugin state: decoding the
35
+ * `scream` and `userlab` banks with this base reproduces their known note sequences exactly.
36
+ *
37
+ * NOT the Cubed step default of 60 - using that loads every pattern two octaves high.
38
+ */
39
+ const BASE_NOTE: int;
40
+ const parse: (text: string) => AblPattern;
41
+ }
42
+ //# sourceMappingURL=AblPattern.d.ts.map