@opendaw/studio-adapters 0.0.81 → 0.0.83

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.
@@ -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,kBAAkB,EAAC,MAAM,sBAAsB,CAAA;AAQvD,qBAAa,gCAAgC,CAAC,CAAC,SAAS,eAAe,GAAG,GAAG,CAAE,YAAW,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU;;gBAiBlG,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;IA0D9B,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,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;IACjB,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,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,kBAAkB,EAAC,MAAM,sBAAsB,CAAA;AAQvD,qBAAa,gCAAgC,CAAC,CAAC,SAAS,eAAe,GAAG,GAAG,CAAE,YAAW,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU;;gBAiBlG,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;IA0D9B,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,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;IAKjB,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"}
@@ -135,7 +135,11 @@ export class AutomatableParameterFieldAdapter {
135
135
  return __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_controlSource, "f").subscribe(observer);
136
136
  }
137
137
  getValue() { return __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_field, "f").getValue(); }
138
- setValue(value) { __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_field, "f").setValue(value); }
138
+ setValue(value) {
139
+ const previousUnitValue = this.getUnitValue();
140
+ __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_field, "f").setValue(value);
141
+ __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_context, "f").parameterFieldAdapters.notifyWrite(this, previousUnitValue);
142
+ }
139
143
  setUnitValue(value) { this.setValue(__classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_valueMapping, "f").y(value)); }
140
144
  getUnitValue() { return __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_valueMapping, "f").x(this.getValue()); }
141
145
  getControlledValue() { return __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_valueMapping, "f").y(this.getControlledUnitValue()); }
@@ -11,6 +11,7 @@ export type EngineProcessorAttachment = {
11
11
  export type ExportStemConfiguration = {
12
12
  includeAudioEffects: boolean;
13
13
  includeSends: boolean;
14
+ useInstrumentOutput: boolean;
14
15
  fileName: string;
15
16
  };
16
17
  export type ExportStemsConfiguration = Record<string, ExportStemConfiguration>;
@@ -1 +1 @@
1
- {"version":3,"file":"EngineProcessorAttachment.d.ts","sourceRoot":"","sources":["../src/EngineProcessorAttachment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAE,MAAM,EAAC,MAAM,kBAAkB,CAAA;AAE5C,MAAM,MAAM,gBAAgB,GAAG,EAAE,CAAA;AAGjC,MAAM,MAAM,yBAAyB,GAAG;IACpC,gBAAgB,EAAE,iBAAiB,CAAA;IACnC,kBAAkB,EAAE,iBAAiB,CAAA;IACrC,aAAa,EAAE,iBAAiB,CAAA;IAChC,OAAO,EAAE,eAAe,CAAA;IACxB,mBAAmB,CAAC,EAAE,wBAAwB,CAAA;IAC9C,OAAO,CAAC,EAAE,gBAAgB,CAAA;CAC7B,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG;IAClC,mBAAmB,EAAE,OAAO,CAAA;IAC5B,YAAY,EAAE,OAAO,CAAA;IACrB,QAAQ,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAA;AAE9E,yBAAiB,wBAAwB,CAAC;IAC/B,MAAM,UAAU,GAAI,QAAQ,MAAM,CAAC,wBAAwB,CAAC,KAAG,GAIhE,CAAA;IAEC,MAAM,gBAAgB,GAAI,MAAM,MAAM,KAAG,MAA4D,CAAA;IAErG,MAAM,0BAA0B,GAAI,eAAe,wBAAwB,KAAG,IAiBpF,CAAA;CACJ"}
1
+ {"version":3,"file":"EngineProcessorAttachment.d.ts","sourceRoot":"","sources":["../src/EngineProcessorAttachment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAE,MAAM,EAAC,MAAM,kBAAkB,CAAA;AAE5C,MAAM,MAAM,gBAAgB,GAAG,EAAE,CAAA;AAGjC,MAAM,MAAM,yBAAyB,GAAG;IACpC,gBAAgB,EAAE,iBAAiB,CAAA;IACnC,kBAAkB,EAAE,iBAAiB,CAAA;IACrC,aAAa,EAAE,iBAAiB,CAAA;IAChC,OAAO,EAAE,eAAe,CAAA;IACxB,mBAAmB,CAAC,EAAE,wBAAwB,CAAA;IAC9C,OAAO,CAAC,EAAE,gBAAgB,CAAA;CAC7B,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG;IAClC,mBAAmB,EAAE,OAAO,CAAA;IAC5B,YAAY,EAAE,OAAO,CAAA;IACrB,mBAAmB,EAAE,OAAO,CAAA;IAC5B,QAAQ,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAA;AAE9E,yBAAiB,wBAAwB,CAAC;IAC/B,MAAM,UAAU,GAAI,QAAQ,MAAM,CAAC,wBAAwB,CAAC,KAAG,GAIhE,CAAA;IAEC,MAAM,gBAAgB,GAAI,MAAM,MAAM,KAAG,MAA4D,CAAA;IAErG,MAAM,0BAA0B,GAAI,eAAe,wBAAwB,KAAG,IAiBpF,CAAA;CACJ"}
@@ -1,11 +1,17 @@
1
- import { Option, Terminable } from "@opendaw/lib-std";
1
+ import { Observer, Option, Subscription, Terminable, unitValue } from "@opendaw/lib-std";
2
2
  import { Address } from "@opendaw/lib-box";
3
3
  import { AutomatableParameterFieldAdapter } from "./AutomatableParameterFieldAdapter";
4
+ export type ParameterWriteEvent = {
5
+ adapter: AutomatableParameterFieldAdapter;
6
+ previousUnitValue: unitValue;
7
+ };
4
8
  export declare class ParameterFieldAdapters {
5
9
  #private;
6
10
  constructor();
7
11
  register(adapter: AutomatableParameterFieldAdapter): Terminable;
8
12
  get(address: Address): AutomatableParameterFieldAdapter;
9
13
  opt(address: Address): Option<AutomatableParameterFieldAdapter>;
14
+ subscribeWrites(observer: Observer<ParameterWriteEvent>): Subscription;
15
+ notifyWrite(adapter: AutomatableParameterFieldAdapter, previousUnitValue: unitValue): void;
10
16
  }
11
17
  //# sourceMappingURL=ParameterFieldAdapters.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ParameterFieldAdapters.d.ts","sourceRoot":"","sources":["../src/ParameterFieldAdapters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAa,UAAU,EAAC,MAAM,kBAAkB,CAAA;AAC9D,OAAO,EAAC,OAAO,EAAC,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAC,gCAAgC,EAAC,MAAM,oCAAoC,CAAA;AAEnF,qBAAa,sBAAsB;;;IAO/B,QAAQ,CAAC,OAAO,EAAE,gCAAgC,GAAG,UAAU;IAK/D,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,gCAAgC;IACvD,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,gCAAgC,CAAC;CAClE"}
1
+ {"version":3,"file":"ParameterFieldAdapters.d.ts","sourceRoot":"","sources":["../src/ParameterFieldAdapters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,QAAQ,EAAE,MAAM,EAAa,YAAY,EAAE,UAAU,EAAE,SAAS,EAAC,MAAM,kBAAkB,CAAA;AAC3G,OAAO,EAAC,OAAO,EAAC,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAC,gCAAgC,EAAC,MAAM,oCAAoC,CAAA;AAEnF,MAAM,MAAM,mBAAmB,GAAG;IAC9B,OAAO,EAAE,gCAAgC,CAAA;IACzC,iBAAiB,EAAE,SAAS,CAAA;CAC/B,CAAA;AAED,qBAAa,sBAAsB;;;IAS/B,QAAQ,CAAC,OAAO,EAAE,gCAAgC,GAAG,UAAU;IAK/D,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,gCAAgC;IACvD,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,gCAAgC,CAAC;IAE/D,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,mBAAmB,CAAC,GAAG,YAAY;IAItE,WAAW,CAAC,OAAO,EAAE,gCAAgC,EAAE,iBAAiB,EAAE,SAAS,GAAG,IAAI;CAG7F"}
@@ -9,12 +9,15 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
9
9
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
10
10
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
11
11
  };
12
- var _ParameterFieldAdapters_set;
12
+ var _ParameterFieldAdapters_set, _ParameterFieldAdapters_writeNotifier;
13
+ import { Notifier } from "@opendaw/lib-std";
13
14
  import { Address } from "@opendaw/lib-box";
14
15
  export class ParameterFieldAdapters {
15
16
  constructor() {
16
17
  _ParameterFieldAdapters_set.set(this, void 0);
18
+ _ParameterFieldAdapters_writeNotifier.set(this, void 0);
17
19
  __classPrivateFieldSet(this, _ParameterFieldAdapters_set, Address.newSet(adapter => adapter.field.address), "f");
20
+ __classPrivateFieldSet(this, _ParameterFieldAdapters_writeNotifier, new Notifier(), "f");
18
21
  }
19
22
  register(adapter) {
20
23
  __classPrivateFieldGet(this, _ParameterFieldAdapters_set, "f").add(adapter);
@@ -22,5 +25,11 @@ export class ParameterFieldAdapters {
22
25
  }
23
26
  get(address) { return __classPrivateFieldGet(this, _ParameterFieldAdapters_set, "f").get(address); }
24
27
  opt(address) { return __classPrivateFieldGet(this, _ParameterFieldAdapters_set, "f").opt(address); }
28
+ subscribeWrites(observer) {
29
+ return __classPrivateFieldGet(this, _ParameterFieldAdapters_writeNotifier, "f").subscribe(observer);
30
+ }
31
+ notifyWrite(adapter, previousUnitValue) {
32
+ __classPrivateFieldGet(this, _ParameterFieldAdapters_writeNotifier, "f").notify({ adapter, previousUnitValue });
33
+ }
25
34
  }
26
- _ParameterFieldAdapters_set = new WeakMap();
35
+ _ParameterFieldAdapters_set = new WeakMap(), _ParameterFieldAdapters_writeNotifier = new WeakMap();
@@ -137,10 +137,10 @@ export class ValueEventCollectionBoxAdapter {
137
137
  }
138
138
  subscribeChange(observer) { return __classPrivateFieldGet(this, _ValueEventCollectionBoxAdapter_changeNotifier, "f").subscribe(observer); }
139
139
  createEvent({ position, index, value, interpolation }) {
140
- // Position is stored as integer in box, so truncate for comparison to prevent duplicates
141
140
  const intPosition = Math.trunc(position);
142
141
  const existing = __classPrivateFieldGet(this, _ValueEventCollectionBoxAdapter_adapters, "f").values().find(event => event.position === intPosition && event.index === index);
143
- if (isDefined(existing)) {
142
+ // the adapters might be out of sync until the current transaction ends. Therefore, we check with isAttached.
143
+ if (isDefined(existing) && existing.box.isAttached()) {
144
144
  // Return an existing event instead of creating a duplicate-update its value
145
145
  existing.box.value.setValue(value);
146
146
  InterpolationFieldAdapter.write(existing.box.interpolation, interpolation);
@@ -16,7 +16,7 @@ import { AudioTimeStretchBoxAdapter } from "../../audio/AudioTimeStretchBoxAdapt
16
16
  import { WarpMarkerBoxAdapter } from "../../audio/WarpMarkerBoxAdapter";
17
17
  import { FadingAdapter } from "./FadingAdapter";
18
18
  type CopyToParams = {
19
- track?: Field<Pointers.RegionCollection>;
19
+ target?: Field<Pointers.RegionCollection>;
20
20
  position?: ppqn;
21
21
  duration?: ppqn;
22
22
  loopOffset?: ppqn;
@@ -70,7 +70,7 @@ export declare class AudioRegionBoxAdapter implements AudioContentBoxAdapter, Lo
70
70
  moveContentStart(delta: ppqn): void;
71
71
  copyTo(params?: CopyToParams): AudioRegionBoxAdapter;
72
72
  consolidate(): void;
73
- canFlatten(_regions: ReadonlyArray<RegionBoxAdapter<unknown>>): boolean;
73
+ canFlatten(regions: ReadonlyArray<RegionBoxAdapter<unknown>>): boolean;
74
74
  flatten(_regions: ReadonlyArray<RegionBoxAdapter<unknown>>): Option<AudioRegionBox>;
75
75
  terminate(): void;
76
76
  toString(): string;
@@ -1 +1 @@
1
- {"version":3,"file":"AudioRegionBoxAdapter.d.ts","sourceRoot":"","sources":["../../../src/timeline/region/AudioRegionBoxAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,GAAG,EAEH,KAAK,EAGL,sBAAsB,EAEtB,gBAAgB,EAChB,QAAQ,EACR,MAAM,EAEN,YAAY,EAGZ,IAAI,EACP,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAC,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAoB,MAAM,kBAAkB,CAAA;AACnF,OAAO,EAAC,OAAO,EAAE,KAAK,EAAoC,MAAM,kBAAkB,CAAA;AAClF,OAAO,EAAC,QAAQ,EAAC,MAAM,uBAAuB,CAAA;AAC9C,OAAO,EAAC,cAAc,EAAC,MAAM,uBAAuB,CAAA;AACpD,OAAO,EAAC,wBAAwB,EAAE,gBAAgB,EAAE,uBAAuB,EAAC,MAAM,qBAAqB,CAAA;AACvG,OAAO,EAAC,eAAe,EAAC,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAC,kBAAkB,EAAC,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAC,mBAAmB,EAAC,MAAM,iCAAiC,CAAA;AACnE,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAC,8BAA8B,EAAC,MAAM,8CAA8C,CAAA;AAC3F,OAAO,EAAC,sBAAsB,EAAC,MAAM,2BAA2B,CAAA;AAChE,OAAO,EAAC,aAAa,EAAC,MAAM,2BAA2B,CAAA;AACvD,OAAO,EAAC,2BAA2B,EAAC,MAAM,yCAAyC,CAAA;AACnF,OAAO,EAAC,0BAA0B,EAAC,MAAM,wCAAwC,CAAA;AACjF,OAAO,EAAC,oBAAoB,EAAC,MAAM,kCAAkC,CAAA;AACrE,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAA;AAE7C,KAAK,YAAY,GAAG;IAChB,KAAK,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAA;IACxC,QAAQ,CAAC,EAAE,IAAI,CAAA;IACf,QAAQ,CAAC,EAAE,IAAI,CAAA;IACf,UAAU,CAAC,EAAE,IAAI,CAAA;IACjB,YAAY,CAAC,EAAE,IAAI,CAAA;IACnB,WAAW,CAAC,EAAE,OAAO,CAAA;CACxB,CAAA;AAED,qBAAa,qBAAsB,YAAW,sBAAsB,EAAE,wBAAwB,CAAC,8BAA8B,CAAC,EAAE,aAAa;;IACzI,QAAQ,CAAC,IAAI,kBAAiB;gBAsBlB,OAAO,EAAE,kBAAkB,EAAE,GAAG,EAAE,cAAc;IAsE5D,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,YAAY;IAEvD,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,uBAAuB,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IAIxD,UAAU,IAAI,IAAI;IAKlB,YAAY,IAAI,IAAI;IAKpB,IAAI,UAAU,IAAI,OAAO,CAA0B;IAEnD,IAAI,GAAG,IAAI,cAAc,CAAmB;IAC5C,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAgC;IACtD,IAAI,OAAO,IAAI,OAAO,CAA2B;IACjD,IAAI,QAAQ,IAAI,IAAI,CAAuC;IAC3D,IAAI,QAAQ,IAAI,IAAI,CAAuD;IAC3E,IAAI,QAAQ,IAAI,IAAI,CAAuC;IAC3D,IAAI,UAAU,IAAI,IAAI,CAAyC;IAC/D,IAAI,YAAY,IAAI,IAAI,CAA2D;IAEnF,eAAe,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI;IACrC,eAAe,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI;IACrC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI;IACzC,IAAI,MAAM,IAAI,IAAI,CAAyC;IAC3D,IAAI,IAAI,IAAI,OAAO,CAAmC;IACtD,IAAI,GAAG,IAAI,GAAG,CAAkC;IAChD,IAAI,IAAI,IAAI,sBAAsB,CAAC,MAAM,CAAC,CAAwB;IAClE,IAAI,MAAM,IAAI,aAAa,CAA6B;IACxD,IAAI,IAAI,IAAI,mBAAmB,CAAyD;IACxF,IAAI,qBAAqB,IAAI,gBAAgB,CAAC,aAAa,CAAC,CAAwB;IACpF,IAAI,QAAQ,IAAI,QAAQ,CAA8D;IACtF,IAAI,cAAc,IAAI,sBAAsB,CAAC,MAAM,CAAC,CAAkC;IACtF,IAAI,mBAAmB,IAAI,OAAO,CAAsC;IACxE,IAAI,sBAAsB,IAAI,MAAM,CAAC,2BAA2B,CAAC,CAEhE;IACD,IAAI,qBAAqB,IAAI,MAAM,CAAC,0BAA0B,CAAC,CAE9D;IACD,IAAI,cAAc,IAAI,MAAM,CAAC,eAAe,CAAC,oBAAoB,CAAC,CAAC,CAElE;IACD,IAAI,KAAK,IAAI,MAAM,CAMlB;IACD,IAAI,UAAU,IAAI,OAAO,CAA2E;IACpG,IAAI,SAAS,IAAI,OAAO,CAAc;IACtC,IAAI,SAAS,IAAI,OAAO,CAAc;IACtC,IAAI,eAAe,IAAI,MAAM,CAAC,eAAe,CAAC,CAG7C;IACD,IAAI,aAAa,YAAyC;IAC1D,IAAI,aAAa,IAAI,MAAM,CAAC,8BAA8B,CAAC,CAG1D;IACD,IAAI,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAsC;IAC9D,IAAI,QAAQ,CAAC,KAAK,EAAE,IAAI,EAQvB;IACD,IAAI,UAAU,CAAC,KAAK,EAAE,IAAI,EAAgE;IAC1F,IAAI,YAAY,CAAC,KAAK,EAAE,IAAI,EAA8D;IAE1F,gBAAgB,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI;IAkBnC,MAAM,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,qBAAqB;IA2BpD,WAAW,IAAI,IAAI;IAGnB,UAAU,CAAC,QAAQ,EAAE,aAAa,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,GAAG,OAAO;IACvE,OAAO,CAAC,QAAQ,EAAE,aAAa,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,cAAc,CAAC;IAKnF,SAAS,IAAI,IAAI;IAYjB,QAAQ,IAAI,MAAM;CAOrB"}
1
+ {"version":3,"file":"AudioRegionBoxAdapter.d.ts","sourceRoot":"","sources":["../../../src/timeline/region/AudioRegionBoxAdapter.ts"],"names":[],"mappings":"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"}
@@ -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 _AudioRegionBoxAdapter_instances, _AudioRegionBoxAdapter_terminator, _AudioRegionBoxAdapter_context, _AudioRegionBoxAdapter_box, _AudioRegionBoxAdapter_durationConverter, _AudioRegionBoxAdapter_loopDurationConverter, _AudioRegionBoxAdapter_playMode, _AudioRegionBoxAdapter_changeNotifier, _AudioRegionBoxAdapter_fadingAdapter, _AudioRegionBoxAdapter_constructing, _AudioRegionBoxAdapter_fileAdapter, _AudioRegionBoxAdapter_fileSubscription, _AudioRegionBoxAdapter_playModeSubscription, _AudioRegionBoxAdapter_tempoSubscription, _AudioRegionBoxAdapter_eventCollectionSubscription, _AudioRegionBoxAdapter_isSelected, _AudioRegionBoxAdapter_dispatchChange;
13
- import { asEnumValue, isInstanceOf, mod, MutableObservableOption, Notifier, Option, safeExecute, Terminable, Terminator, UUID } from "@opendaw/lib-std";
13
+ import { Arrays, asEnumValue, isInstanceOf, mod, MutableObservableOption, Notifier, Option, safeExecute, Terminable, Terminator, UUID } from "@opendaw/lib-std";
14
14
  import { TimeBase, TimeBaseConverter } from "@opendaw/lib-dsp";
15
15
  import { Propagation } from "@opendaw/lib-box";
16
16
  import { AudioRegionBox } from "@opendaw/studio-boxes";
@@ -205,7 +205,7 @@ export class AudioRegionBoxAdapter {
205
205
  const adapter = __classPrivateFieldGet(this, _AudioRegionBoxAdapter_context, "f").boxAdapters.adapterFor(AudioRegionBox.create(__classPrivateFieldGet(this, _AudioRegionBoxAdapter_context, "f").boxGraph, UUID.generate(), box => {
206
206
  box.timeBase.setValue(__classPrivateFieldGet(this, _AudioRegionBoxAdapter_box, "f").timeBase.getValue());
207
207
  box.position.setValue(params?.position ?? __classPrivateFieldGet(this, _AudioRegionBoxAdapter_box, "f").position.getValue());
208
- box.regions.refer(params?.track ?? __classPrivateFieldGet(this, _AudioRegionBoxAdapter_box, "f").regions.targetVertex.unwrap());
208
+ box.regions.refer(params?.target ?? __classPrivateFieldGet(this, _AudioRegionBoxAdapter_box, "f").regions.targetVertex.unwrap());
209
209
  box.file.refer(__classPrivateFieldGet(this, _AudioRegionBoxAdapter_box, "f").file.targetVertex.unwrap());
210
210
  box.events.refer(eventTarget);
211
211
  box.mute.setValue(this.mute);
@@ -221,10 +221,12 @@ export class AudioRegionBoxAdapter {
221
221
  adapter.duration = params?.duration ?? this.resolveDuration(adapter.position);
222
222
  return adapter;
223
223
  }
224
- consolidate() {
225
- // TODO This needs to done by creating a new audio file
224
+ consolidate() { }
225
+ canFlatten(regions) {
226
+ return regions.length > 0
227
+ && Arrays.satisfy(regions, (a, b) => a.trackBoxAdapter.contains(b.trackBoxAdapter.unwrap()))
228
+ && regions.every(region => region.isSelected && region instanceof AudioRegionBoxAdapter);
226
229
  }
227
- canFlatten(_regions) { return false; }
228
230
  flatten(_regions) {
229
231
  // TODO This needs to done by creating a new audio file
230
232
  return Option.None;
@@ -9,7 +9,7 @@ import { NoteEventCollectionBoxAdapter } from "../collection/NoteEventCollection
9
9
  import { BoxAdaptersContext } from "../../BoxAdaptersContext";
10
10
  import { MutableRegion } from "./MutableRegion";
11
11
  type CopyToParams = {
12
- track?: Field<Pointers.RegionCollection>;
12
+ target?: Field<Pointers.RegionCollection>;
13
13
  position?: ppqn;
14
14
  duration?: ppqn;
15
15
  loopOffset?: ppqn;
@@ -1 +1 @@
1
- {"version":3,"file":"NoteRegionBoxAdapter.d.ts","sourceRoot":"","sources":["../../../src/timeline/region/NoteRegionBoxAdapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"NoteRegionBoxAdapter.d.ts","sourceRoot":"","sources":["../../../src/timeline/region/NoteRegionBoxAdapter.ts"],"names":[],"mappings":"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"}
@@ -147,7 +147,7 @@ export class NoteRegionBoxAdapter {
147
147
  box.label.setValue(this.label);
148
148
  box.mute.setValue(this.mute);
149
149
  box.events.refer(eventTarget);
150
- box.regions.refer(params?.track ?? __classPrivateFieldGet(this, _NoteRegionBoxAdapter_box, "f").regions.targetVertex.unwrap());
150
+ box.regions.refer(params?.target ?? __classPrivateFieldGet(this, _NoteRegionBoxAdapter_box, "f").regions.targetVertex.unwrap());
151
151
  }), NoteRegionBoxAdapter);
152
152
  }
153
153
  consolidate() {
@@ -10,7 +10,7 @@ import { ValueRegionBox } from "@opendaw/studio-boxes";
10
10
  import { ValueEventBoxAdapter } from "../event/ValueEventBoxAdapter";
11
11
  import { MutableRegion } from "./MutableRegion";
12
12
  type CopyToParams = {
13
- track?: Field<Pointers.RegionCollection>;
13
+ target?: Field<Pointers.RegionCollection>;
14
14
  position?: ppqn;
15
15
  duration?: ppqn;
16
16
  loopOffset?: ppqn;
@@ -61,7 +61,7 @@ export declare class ValueRegionBoxAdapter implements LoopableRegionBoxAdapter<V
61
61
  moveContentStart(delta: ppqn): void;
62
62
  copyTo(params?: CopyToParams): ValueRegionBoxAdapter;
63
63
  consolidate(): void;
64
- canFlatten(_regions: ReadonlyArray<RegionBoxAdapter<unknown>>): boolean;
64
+ canFlatten(regions: ReadonlyArray<RegionBoxAdapter<unknown>>): boolean;
65
65
  flatten(regions: ReadonlyArray<RegionBoxAdapter<unknown>>): Option<ValueRegionBox>;
66
66
  toString(): string;
67
67
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ValueRegionBoxAdapter.d.ts","sourceRoot":"","sources":["../../../src/timeline/region/ValueRegionBoxAdapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ValueRegionBoxAdapter.d.ts","sourceRoot":"","sources":["../../../src/timeline/region/ValueRegionBoxAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAiC,IAAI,EAAyB,MAAM,kBAAkB,CAAA;AAC7G,OAAO,EAEH,GAAG,EAGH,KAAK,EAEL,QAAQ,EACR,MAAM,EAEN,YAAY,EAGZ,SAAS,EACT,IAAI,EACP,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAC,OAAO,EAAE,KAAK,EAAsB,MAAM,kBAAkB,CAAA;AACpE,OAAO,EAAC,QAAQ,EAAC,MAAM,uBAAuB,CAAA;AAC9C,OAAO,EAAC,eAAe,EAAC,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAC,wBAAwB,EAAE,gBAAgB,EAAE,uBAAuB,EAAC,MAAM,qBAAqB,CAAA;AACvG,OAAO,EAAC,8BAA8B,EAAC,MAAM,8CAA8C,CAAA;AAC3F,OAAO,EAAC,kBAAkB,EAAC,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAyC,cAAc,EAAC,MAAM,uBAAuB,CAAA;AAE5F,OAAO,EAAC,oBAAoB,EAAC,MAAM,+BAA+B,CAAA;AAClE,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAA;AAE7C,KAAK,YAAY,GAAG;IAChB,MAAM,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAA;IACzC,QAAQ,CAAC,EAAE,IAAI,CAAA;IACf,QAAQ,CAAC,EAAE,IAAI,CAAA;IACf,UAAU,CAAC,EAAE,IAAI,CAAA;IACjB,YAAY,CAAC,EAAE,IAAI,CAAA;IACnB,WAAW,CAAC,EAAE,OAAO,CAAA;CACxB,CAAA;AAED,qBAAa,qBACT,YAAW,wBAAwB,CAAC,8BAA8B,CAAC,EAAE,aAAa;;IAClF,QAAQ,CAAC,IAAI,kBAAiB;gBAalB,OAAO,EAAE,kBAAkB,EAAE,GAAG,EAAE,cAAc;IAuC5D,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,GAAG,SAAS;IAKvD,aAAa,CAAC,QAAQ,EAAE,SAAS,GAAG,SAAS;IAQ7C,aAAa,CAAC,QAAQ,EAAE,SAAS,GAAG,SAAS;IAU7C,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,YAAY;IAEvD,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,uBAAuB,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IAIxD,UAAU,IAAI,IAAI;IAKlB,YAAY,IAAI,IAAI;IAKpB,IAAI,UAAU,IAAI,OAAO,CAA0B;IAEnD,uBAAuB,IAAI,IAAI;IAC/B,sBAAsB,IAAI,IAAI;IAE9B,SAAS,IAAI,IAAI;IAKjB,IAAI,GAAG,IAAI,cAAc,CAAmB;IAC5C,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAgC;IACtD,IAAI,OAAO,IAAI,OAAO,CAA2B;IACjD,IAAI,QAAQ,IAAI,IAAI,CAAuC;IAC3D,IAAI,QAAQ,IAAI,IAAI,CAAuC;IAC3D,IAAI,UAAU,IAAI,IAAI,CAAyC;IAC/D,IAAI,YAAY,IAAI,IAAI,CAA2C;IACnE,IAAI,MAAM,IAAI,IAAI,CAAyC;IAC3D,IAAI,QAAQ,IAAI,IAAI,CAAuC;IAE3D,eAAe,CAAC,SAAS,EAAE,IAAI,GAAG,IAAI;IACtC,eAAe,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI;IACrC,mBAAmB,CAAC,SAAS,EAAE,IAAI,GAAG,IAAI;IAC1C,IAAI,IAAI,IAAI,OAAO,CAAmC;IACtD,IAAI,GAAG,IAAI,GAAG,CAAkC;IAChD,IAAI,aAAa,YAAyC;IAC1D,IAAI,MAAM,IAAI,MAAM,CAAC,eAAe,CAAC,oBAAoB,CAAC,CAAC,CAE1D;IACD,IAAI,aAAa,IAAI,MAAM,CAAC,8BAA8B,CAAC,CAG1D;IACD,IAAI,KAAK,IAAI,MAAM,CAAoC;IACvD,IAAI,eAAe,IAAI,MAAM,CAAC,eAAe,CAAC,CAI7C;IACD,IAAI,UAAU,IAAI,OAAO,CAA2E;IACpG,IAAI,SAAS,IAAI,OAAO,CAAc;IACtC,IAAI,SAAS,IAAI,OAAO,CAAc;IAEtC,IAAI,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAsC;IAC9D,IAAI,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAsC;IAC9D,IAAI,UAAU,CAAC,KAAK,EAAE,IAAI,EAAwC;IAClE,IAAI,YAAY,CAAC,KAAK,EAAE,IAAI,EAA0C;IAEtE,gBAAgB,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI;IAQnC,MAAM,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,qBAAqB;IAkBpD,WAAW,IAAI,IAAI;IAUnB,UAAU,CAAC,OAAO,EAAE,aAAa,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,GAAG,OAAO;IAMtE,OAAO,CAAC,OAAO,EAAE,aAAa,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,cAAc,CAAC;IAoHlF,QAAQ,IAAI,MAAM;CAMrB"}
@@ -10,12 +10,13 @@ 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 _ValueRegionBoxAdapter_instances, _ValueRegionBoxAdapter_terminator, _ValueRegionBoxAdapter_context, _ValueRegionBoxAdapter_box, _ValueRegionBoxAdapter_changeNotifier, _ValueRegionBoxAdapter_isSelected, _ValueRegionBoxAdapter_isConstructing, _ValueRegionBoxAdapter_eventCollectionSubscription, _ValueRegionBoxAdapter_dispatchChange;
13
- import { LoopableRegion, PPQN, RegionCollection } from "@opendaw/lib-dsp";
14
- import { Arrays, Notifier, Option, safeExecute, Terminable, Terminator, UUID } from "@opendaw/lib-std";
13
+ import { Interpolation, LoopableRegion, PPQN, RegionCollection } from "@opendaw/lib-dsp";
14
+ import { Arrays, Integer, isDefined, Notifier, Option, safeExecute, Terminable, Terminator, UUID } from "@opendaw/lib-std";
15
15
  import { Propagation } from "@opendaw/lib-box";
16
16
  import { TrackBoxAdapter } from "../TrackBoxAdapter";
17
17
  import { ValueEventCollectionBoxAdapter } from "../collection/ValueEventCollectionBoxAdapter";
18
- import { ValueEventCollectionBox, ValueRegionBox } from "@opendaw/studio-boxes";
18
+ import { ValueEventBox, ValueEventCollectionBox, ValueRegionBox } from "@opendaw/studio-boxes";
19
+ import { InterpolationFieldAdapter } from "../event/InterpolationFieldAdapter";
19
20
  export class ValueRegionBoxAdapter {
20
21
  constructor(context, box) {
21
22
  _ValueRegionBoxAdapter_instances.add(this);
@@ -67,7 +68,17 @@ export class ValueRegionBoxAdapter {
67
68
  const content = this.optCollection;
68
69
  return content.isEmpty() ? fallback : content.unwrap().valueAt(LoopableRegion.globalToLocal(this, position), fallback);
69
70
  }
70
- incomingValue(fallback) { return this.valueAt(this.position, fallback); }
71
+ incomingValue(fallback) {
72
+ const content = this.optCollection;
73
+ if (content.isEmpty()) {
74
+ return fallback;
75
+ }
76
+ const zeroEvent = content.unwrap().events.greaterEqual(0);
77
+ if (isDefined(zeroEvent) && zeroEvent.position === 0) {
78
+ return zeroEvent.value;
79
+ }
80
+ return this.valueAt(this.position, fallback);
81
+ }
71
82
  outgoingValue(fallback) {
72
83
  const optContent = this.optCollection;
73
84
  if (optContent.isEmpty()) {
@@ -156,7 +167,7 @@ export class ValueRegionBoxAdapter {
156
167
  box.label.setValue(this.label);
157
168
  box.mute.setValue(this.mute);
158
169
  box.events.refer(eventTarget);
159
- box.regions.refer(params?.track ?? __classPrivateFieldGet(this, _ValueRegionBoxAdapter_box, "f").regions.targetVertex.unwrap());
170
+ box.regions.refer(params?.target ?? __classPrivateFieldGet(this, _ValueRegionBoxAdapter_box, "f").regions.targetVertex.unwrap());
160
171
  }), ValueRegionBoxAdapter);
161
172
  }
162
173
  consolidate() {
@@ -170,10 +181,10 @@ export class ValueRegionBoxAdapter {
170
181
  __classPrivateFieldGet(this, _ValueRegionBoxAdapter_box, "f").events.refer(collectionBox.owners);
171
182
  });
172
183
  }
173
- canFlatten(_regions) {
174
- return false;
175
- /*return regions.length > 0 && Arrays.satisfy(regions, (a, b) => a.trackAdapter.contains(b.trackAdapter.unwrap()))
176
- && regions.every(region => region.isSelected && region instanceof ValueRegionBoxAdapter)*/
184
+ canFlatten(regions) {
185
+ return regions.length > 0
186
+ && Arrays.satisfy(regions, (a, b) => a.trackBoxAdapter.contains(b.trackBoxAdapter.unwrap()))
187
+ && regions.every(region => region.isSelected && region instanceof ValueRegionBoxAdapter);
177
188
  }
178
189
  flatten(regions) {
179
190
  if (!this.canFlatten(regions)) {
@@ -186,20 +197,103 @@ export class ValueRegionBoxAdapter {
186
197
  const rangeMin = first.position;
187
198
  const rangeMax = last.position + last.duration;
188
199
  const trackBoxAdapter = first.trackBoxAdapter.unwrap();
189
- const collectionBox = ValueEventCollectionBox.create(graph, UUID.generate());
190
200
  const overlapping = Array.from(trackBoxAdapter.regions.collection.iterateRange(rangeMin, rangeMax));
201
+ const entries = [];
191
202
  overlapping
192
203
  .filter(region => region.isSelected)
193
204
  .forEach(anyRegion => {
194
- const region = anyRegion; // we made that sure in canFlatten
195
- for (const { resultStart, resultEnd, rawStart } of LoopableRegion.locateLoops(region, region.position, region.complete)) {
196
- const searchStart = Math.floor(resultStart - rawStart);
197
- const searchEnd = Math.floor(resultEnd - rawStart);
198
- for (const _event of region.events.unwrap().iterateRange(searchStart, searchEnd)) {
199
- // TODO Flatten
205
+ const region = anyRegion;
206
+ const collection = region.optCollection.unwrap();
207
+ const events = collection.events;
208
+ for (const { rawStart, regionStart, regionEnd } of LoopableRegion.locateLoops(region, region.position, region.complete)) {
209
+ const searchMin = regionStart - rawStart;
210
+ const searchMax = regionEnd - rawStart;
211
+ const firstContent = events.greaterEqual(searchMin);
212
+ if (!isDefined(firstContent) || firstContent.position !== searchMin) {
213
+ const lowerEvent = events.lowerEqual(searchMin);
214
+ if (isDefined(lowerEvent)) {
215
+ entries.push({
216
+ position: regionStart - rangeMin,
217
+ value: collection.valueAt(searchMin, 0),
218
+ interpolation: lowerEvent.interpolation
219
+ });
220
+ }
221
+ }
222
+ let addedBoundary = false;
223
+ for (const event of events.iterateRange(searchMin, Integer.MAX_VALUE)) {
224
+ const globalPos = event.position + rawStart;
225
+ if (globalPos < regionEnd) {
226
+ entries.push({
227
+ position: globalPos - rangeMin,
228
+ value: event.value,
229
+ interpolation: event.interpolation
230
+ });
231
+ }
232
+ else if (globalPos === regionEnd) {
233
+ entries.push({
234
+ position: globalPos - rangeMin,
235
+ value: event.value,
236
+ interpolation: Interpolation.None
237
+ });
238
+ addedBoundary = true;
239
+ break;
240
+ }
241
+ else {
242
+ entries.push({
243
+ position: regionEnd - rangeMin,
244
+ value: collection.valueAt(searchMax, 0),
245
+ interpolation: Interpolation.None
246
+ });
247
+ addedBoundary = true;
248
+ break;
249
+ }
250
+ }
251
+ if (!addedBoundary) {
252
+ entries.push({
253
+ position: regionEnd - rangeMin,
254
+ value: collection.valueAt(searchMax, 0),
255
+ interpolation: Interpolation.None
256
+ });
200
257
  }
201
258
  }
202
259
  });
260
+ const cleaned = [];
261
+ for (const entry of entries) {
262
+ const prev = cleaned.length > 0 ? cleaned[cleaned.length - 1] : undefined;
263
+ if (isDefined(prev) && prev.position === entry.position && prev.value === entry.value) {
264
+ cleaned[cleaned.length - 1] = entry;
265
+ }
266
+ else {
267
+ cleaned.push(entry);
268
+ }
269
+ }
270
+ const collectionBox = ValueEventCollectionBox.create(graph, UUID.generate());
271
+ let idx = 0;
272
+ while (idx < cleaned.length) {
273
+ let end = idx + 1;
274
+ while (end < cleaned.length && cleaned[end].position === cleaned[idx].position) {
275
+ end++;
276
+ }
277
+ const firstEntry = cleaned[idx];
278
+ const lastEntry = cleaned[end - 1];
279
+ const eventBox = ValueEventBox.create(graph, UUID.generate(), box => {
280
+ box.position.setValue(firstEntry.position);
281
+ box.index.setValue(0);
282
+ box.value.setValue(firstEntry.value);
283
+ box.events.refer(collectionBox.events);
284
+ });
285
+ InterpolationFieldAdapter.write(eventBox.interpolation, end - idx > 1 ? Interpolation.None : firstEntry.interpolation);
286
+ if (end - idx > 1) {
287
+ const lastBox = ValueEventBox.create(graph, UUID.generate(), box => {
288
+ box.position.setValue(lastEntry.position);
289
+ box.index.setValue(1);
290
+ box.value.setValue(lastEntry.value);
291
+ box.events.refer(collectionBox.events);
292
+ });
293
+ InterpolationFieldAdapter.write(lastBox.interpolation, lastEntry.interpolation);
294
+ }
295
+ idx = end;
296
+ }
203
297
  overlapping.forEach(({ box }) => box.delete());
204
298
  return Option.wrap(ValueRegionBox.create(graph, UUID.generate(), box => {
205
299
  box.position.setValue(rangeMin);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opendaw/studio-adapters",
3
- "version": "0.0.81",
3
+ "version": "0.0.83",
4
4
  "license": "LGPL-3.0-or-later",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -23,18 +23,18 @@
23
23
  "test": "echo \"No tests to run\""
24
24
  },
25
25
  "dependencies": {
26
- "@opendaw/lib-box": "^0.0.71",
27
- "@opendaw/lib-dsp": "^0.0.70",
28
- "@opendaw/lib-fusion": "^0.0.76",
29
- "@opendaw/lib-runtime": "^0.0.68",
30
- "@opendaw/lib-std": "^0.0.67",
31
- "@opendaw/studio-boxes": "^0.0.73",
32
- "@opendaw/studio-enums": "^0.0.62",
26
+ "@opendaw/lib-box": "^0.0.72",
27
+ "@opendaw/lib-dsp": "^0.0.71",
28
+ "@opendaw/lib-fusion": "^0.0.77",
29
+ "@opendaw/lib-runtime": "^0.0.69",
30
+ "@opendaw/lib-std": "^0.0.68",
31
+ "@opendaw/studio-boxes": "^0.0.74",
32
+ "@opendaw/studio-enums": "^0.0.63",
33
33
  "soundfont2": "^0.5.0"
34
34
  },
35
35
  "devDependencies": {
36
36
  "@opendaw/eslint-config": "^0.0.27",
37
37
  "@opendaw/typescript-config": "^0.0.28"
38
38
  },
39
- "gitHead": "410e32d862fae20e1ecfffcee7407451e6537655"
39
+ "gitHead": "99391fc2af474d2c0fd9f3a81c5655918cad4b96"
40
40
  }