@opendaw/studio-adapters 0.0.70 → 0.0.71
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.
- package/dist/AutomatableParameterFieldAdapter.d.ts.map +1 -1
- package/dist/AutomatableParameterFieldAdapter.js +3 -1
- package/dist/BoxAdapters.d.ts.map +1 -1
- package/dist/BoxAdapters.js +2 -0
- package/dist/BoxAdaptersContext.d.ts +1 -2
- package/dist/BoxAdaptersContext.d.ts.map +1 -1
- package/dist/ClipSequencing.d.ts +1 -1
- package/dist/ClipSequencing.d.ts.map +1 -1
- package/dist/EngineStateSchema.d.ts +1 -0
- package/dist/EngineStateSchema.d.ts.map +1 -1
- package/dist/EngineStateSchema.js +1 -0
- package/dist/TempoRange.d.ts +5 -0
- package/dist/TempoRange.d.ts.map +1 -0
- package/dist/TempoRange.js +1 -0
- package/dist/Validator.d.ts +0 -2
- package/dist/Validator.d.ts.map +1 -1
- package/dist/Validator.js +4 -3
- package/dist/VaryingTempoMap.d.ts +18 -0
- package/dist/VaryingTempoMap.d.ts.map +1 -0
- package/dist/VaryingTempoMap.js +105 -0
- package/dist/audio/AudioFileBoxAdapter.js +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/project/ProjectSkeleton.d.ts.map +1 -1
- package/dist/project/ProjectSkeleton.js +4 -3
- package/dist/project/ProjectUtils.d.ts.map +1 -1
- package/dist/project/ProjectUtils.js +17 -16
- package/dist/selection/FilteredSelection.js +2 -2
- package/dist/selection/VertexSelection.d.ts.map +1 -1
- package/dist/selection/VertexSelection.js +0 -1
- package/dist/timeline/RegionBoxAdapter.d.ts +8 -0
- package/dist/timeline/RegionBoxAdapter.d.ts.map +1 -1
- package/dist/timeline/RegionEditing.d.ts.map +1 -1
- package/dist/timeline/RegionEditing.js +0 -1
- package/dist/timeline/SignatureEventBoxAdapter.d.ts +24 -0
- package/dist/timeline/SignatureEventBoxAdapter.d.ts.map +1 -0
- package/dist/timeline/SignatureEventBoxAdapter.js +42 -0
- package/dist/timeline/SignatureTrackAdapter.d.ts +41 -0
- package/dist/timeline/SignatureTrackAdapter.d.ts.map +1 -0
- package/dist/timeline/SignatureTrackAdapter.js +279 -0
- package/dist/timeline/TimelineBoxAdapter.d.ts +7 -2
- package/dist/timeline/TimelineBoxAdapter.d.ts.map +1 -1
- package/dist/timeline/TimelineBoxAdapter.js +52 -7
- package/dist/timeline/TrackBoxAdapter.d.ts +1 -0
- package/dist/timeline/TrackBoxAdapter.d.ts.map +1 -1
- package/dist/timeline/TrackBoxAdapter.js +1 -0
- package/dist/timeline/clip/AudioClipBoxAdapter.d.ts +1 -2
- package/dist/timeline/clip/AudioClipBoxAdapter.d.ts.map +1 -1
- package/dist/timeline/clip/AudioClipBoxAdapter.js +3 -4
- package/dist/timeline/collection/NoteEventCollectionBoxAdapter.d.ts.map +1 -1
- package/dist/timeline/collection/NoteEventCollectionBoxAdapter.js +10 -8
- package/dist/timeline/collection/ValueEventCollectionBoxAdapter.d.ts +2 -2
- package/dist/timeline/collection/ValueEventCollectionBoxAdapter.d.ts.map +1 -1
- package/dist/timeline/collection/ValueEventCollectionBoxAdapter.js +15 -8
- package/dist/timeline/event/ValueEventBoxAdapter.d.ts +1 -1
- package/dist/timeline/event/ValueEventBoxAdapter.d.ts.map +1 -1
- package/dist/timeline/region/AudioRegionBoxAdapter.d.ts +4 -0
- package/dist/timeline/region/AudioRegionBoxAdapter.d.ts.map +1 -1
- package/dist/timeline/region/AudioRegionBoxAdapter.js +17 -13
- package/dist/timeline/region/NoteRegionBoxAdapter.d.ts +5 -1
- package/dist/timeline/region/NoteRegionBoxAdapter.d.ts.map +1 -1
- package/dist/timeline/region/NoteRegionBoxAdapter.js +4 -0
- package/dist/timeline/region/ValueRegionBoxAdapter.d.ts +4 -0
- package/dist/timeline/region/ValueRegionBoxAdapter.d.ts.map +1 -1
- package/dist/timeline/region/ValueRegionBoxAdapter.js +4 -0
- package/package.json +9 -9
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
2
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
3
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
4
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
5
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
6
|
+
};
|
|
7
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
8
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
9
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
10
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
11
|
+
};
|
|
12
|
+
var _SignatureEventBoxAdapter_terminator, _SignatureEventBoxAdapter_context, _SignatureEventBoxAdapter_box;
|
|
13
|
+
import { Terminator } from "@opendaw/lib-std";
|
|
14
|
+
import { Propagation } from "@opendaw/lib-box";
|
|
15
|
+
import { TimelineBoxAdapter } from "./TimelineBoxAdapter";
|
|
16
|
+
export class SignatureEventBoxAdapter {
|
|
17
|
+
constructor(context, box) {
|
|
18
|
+
this.type = "signature-event";
|
|
19
|
+
_SignatureEventBoxAdapter_terminator.set(this, new Terminator());
|
|
20
|
+
_SignatureEventBoxAdapter_context.set(this, void 0);
|
|
21
|
+
_SignatureEventBoxAdapter_box.set(this, void 0);
|
|
22
|
+
__classPrivateFieldSet(this, _SignatureEventBoxAdapter_context, context, "f");
|
|
23
|
+
__classPrivateFieldSet(this, _SignatureEventBoxAdapter_box, box, "f");
|
|
24
|
+
__classPrivateFieldGet(this, _SignatureEventBoxAdapter_terminator, "f").own(__classPrivateFieldGet(this, _SignatureEventBoxAdapter_box, "f").subscribe(Propagation.Children, (_update) => this.trackAdapter.ifSome(adapter => adapter.dispatchChange())));
|
|
25
|
+
}
|
|
26
|
+
get box() { return __classPrivateFieldGet(this, _SignatureEventBoxAdapter_box, "f"); }
|
|
27
|
+
get uuid() { return __classPrivateFieldGet(this, _SignatureEventBoxAdapter_box, "f").address.uuid; }
|
|
28
|
+
get address() { return __classPrivateFieldGet(this, _SignatureEventBoxAdapter_box, "f").address; }
|
|
29
|
+
get index() { return __classPrivateFieldGet(this, _SignatureEventBoxAdapter_box, "f").index.getValue(); }
|
|
30
|
+
get indexField() { return __classPrivateFieldGet(this, _SignatureEventBoxAdapter_box, "f").index; }
|
|
31
|
+
get relativePosition() { return __classPrivateFieldGet(this, _SignatureEventBoxAdapter_box, "f").relativePosition.getValue(); }
|
|
32
|
+
get nominator() { return __classPrivateFieldGet(this, _SignatureEventBoxAdapter_box, "f").nominator.getValue(); }
|
|
33
|
+
get denominator() { return __classPrivateFieldGet(this, _SignatureEventBoxAdapter_box, "f").denominator.getValue(); }
|
|
34
|
+
get trackAdapter() {
|
|
35
|
+
return __classPrivateFieldGet(this, _SignatureEventBoxAdapter_box, "f").events.targetVertex
|
|
36
|
+
.map(vertex => __classPrivateFieldGet(this, _SignatureEventBoxAdapter_context, "f").boxAdapters.adapterFor(vertex.box, TimelineBoxAdapter).signatureTrack);
|
|
37
|
+
}
|
|
38
|
+
terminate() { __classPrivateFieldGet(this, _SignatureEventBoxAdapter_terminator, "f").terminate(); }
|
|
39
|
+
toString() { return `{SignatureEventBoxAdapter ${this.nominator}/${this.denominator}}`; }
|
|
40
|
+
}
|
|
41
|
+
_SignatureEventBoxAdapter_terminator = new WeakMap(), _SignatureEventBoxAdapter_context = new WeakMap(), _SignatureEventBoxAdapter_box = new WeakMap();
|
|
42
|
+
SignatureEventBoxAdapter.Comparator = (a, b) => a.index - b.index;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { int, Notifier, Observer, Option, Subscription, Terminable } from "@opendaw/lib-std";
|
|
2
|
+
import { BoxAdaptersContext } from "../BoxAdaptersContext";
|
|
3
|
+
import { ppqn } from "@opendaw/lib-dsp";
|
|
4
|
+
import { SignatureEventBoxAdapter } from "./SignatureEventBoxAdapter";
|
|
5
|
+
import { Signature, SignatureTrack, TimelineBox } from "@opendaw/studio-boxes";
|
|
6
|
+
export type SignatureEvent = Readonly<{
|
|
7
|
+
index: int;
|
|
8
|
+
accumulatedPpqn: ppqn;
|
|
9
|
+
accumulatedBars: int;
|
|
10
|
+
nominator: int;
|
|
11
|
+
denominator: int;
|
|
12
|
+
}>;
|
|
13
|
+
export declare class SignatureTrackAdapter implements Terminable {
|
|
14
|
+
#private;
|
|
15
|
+
readonly changeNotifier: Notifier<void>;
|
|
16
|
+
constructor(context: BoxAdaptersContext, signature: Signature, signatureTrack: SignatureTrack);
|
|
17
|
+
subscribe(observer: Observer<void>): Subscription;
|
|
18
|
+
get context(): BoxAdaptersContext;
|
|
19
|
+
get enabled(): boolean;
|
|
20
|
+
get object(): TimelineBox["signatureTrack"];
|
|
21
|
+
get size(): int;
|
|
22
|
+
get storageSignature(): Readonly<[int, int]>;
|
|
23
|
+
dispatchChange(): void;
|
|
24
|
+
signatureAt(position: ppqn): Readonly<[int, int]>;
|
|
25
|
+
iterateAll(): IterableIterator<SignatureEvent>;
|
|
26
|
+
changeSignature(nominator: int, denominator: int): void;
|
|
27
|
+
deleteAdapter(adapter: SignatureEventBoxAdapter): void;
|
|
28
|
+
createEvent(position: ppqn, nominator: int, denominator: int): void;
|
|
29
|
+
adapterAt(index: int): Option<SignatureEventBoxAdapter>;
|
|
30
|
+
moveEvent(adapter: SignatureEventBoxAdapter, targetPpqn: ppqn): void;
|
|
31
|
+
floorToBar(position: ppqn): ppqn;
|
|
32
|
+
ceilToBar(position: ppqn): ppqn;
|
|
33
|
+
roundToBar(position: ppqn): ppqn;
|
|
34
|
+
barLengthAt(position: ppqn): ppqn;
|
|
35
|
+
getBarInterval(position: ppqn): {
|
|
36
|
+
position: ppqn;
|
|
37
|
+
complete: ppqn;
|
|
38
|
+
};
|
|
39
|
+
terminate(): void;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=SignatureTrackAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SignatureTrackAdapter.d.ts","sourceRoot":"","sources":["../../src/timeline/SignatureTrackAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,GAAG,EAEH,QAAQ,EAER,QAAQ,EACR,MAAM,EACN,YAAY,EACZ,UAAU,EAGb,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAC,kBAAkB,EAAC,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAC,IAAI,EAAO,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAC,wBAAwB,EAAC,MAAM,4BAA4B,CAAA;AACnE,OAAO,EAAC,SAAS,EAAqB,cAAc,EAAE,WAAW,EAAC,MAAM,uBAAuB,CAAA;AAI/F,MAAM,MAAM,cAAc,GAAG,QAAQ,CAAC;IAClC,KAAK,EAAE,GAAG,CAAC;IACX,eAAe,EAAE,IAAI,CAAC;IACtB,eAAe,EAAE,GAAG,CAAC;IACrB,SAAS,EAAE,GAAG,CAAC;IACf,WAAW,EAAE,GAAG,CAAA;CACnB,CAAC,CAAA;AAEF,qBAAa,qBAAsB,YAAW,UAAU;;IAOpD,QAAQ,CAAC,cAAc,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAA;gBAG3B,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,cAAc;IAoB7F,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,YAAY;IAEjD,IAAI,OAAO,IAAI,kBAAkB,CAAuB;IACxD,IAAI,OAAO,IAAI,OAAO,CAAiD;IACvE,IAAI,MAAM,IAAI,WAAW,CAAC,gBAAgB,CAAC,CAA8B;IACzE,IAAI,IAAI,IAAI,GAAG,CAA+B;IAC9C,IAAI,gBAAgB,IAAI,QAAQ,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAG3C;IAED,cAAc,IAAI,IAAI;IAEtB,WAAW,CAAC,QAAQ,EAAE,IAAI,GAAG,QAAQ,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAU/C,UAAU,IAAI,gBAAgB,CAAC,cAAc,CAAC;IAehD,eAAe,CAAC,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,GAAG,IAAI;IA8BvD,aAAa,CAAC,OAAO,EAAE,wBAAwB,GAAG,IAAI;IA+BtD,WAAW,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,GAAG,IAAI;IAqCnE,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM,CAAC,wBAAwB,CAAC;IAEvD,SAAS,CAAC,OAAO,EAAE,wBAAwB,EAAE,UAAU,EAAE,IAAI,GAAG,IAAI;IAkEpE,UAAU,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI;IAMhC,SAAS,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI;IAM/B,UAAU,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI;IAMhC,WAAW,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI;IAKjC,cAAc,CAAC,QAAQ,EAAE,IAAI,GAAG;QAAE,QAAQ,EAAE,IAAI,CAAC;QAAC,QAAQ,EAAE,IAAI,CAAA;KAAE;IAOlE,SAAS,IAAI,IAAI;CACpB"}
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
2
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
3
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
4
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
5
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
6
|
+
};
|
|
7
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
8
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
9
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
10
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
11
|
+
};
|
|
12
|
+
var _SignatureTrackAdapter_instances, _SignatureTrackAdapter_terminator, _SignatureTrackAdapter_context, _SignatureTrackAdapter_signature, _SignatureTrackAdapter_signatureTrack, _SignatureTrackAdapter_adapters, _SignatureTrackAdapter_ppqnToBar, _SignatureTrackAdapter_findSignatureEventAt;
|
|
13
|
+
import { isNull, Notifier, Terminator, UUID } from "@opendaw/lib-std";
|
|
14
|
+
import { PPQN } from "@opendaw/lib-dsp";
|
|
15
|
+
import { SignatureEventBoxAdapter } from "./SignatureEventBoxAdapter";
|
|
16
|
+
import { SignatureEventBox } from "@opendaw/studio-boxes";
|
|
17
|
+
import { IndexedBoxAdapterCollection } from "../IndexedBoxAdapterCollection";
|
|
18
|
+
import { Pointers } from "@opendaw/studio-enums";
|
|
19
|
+
export class SignatureTrackAdapter {
|
|
20
|
+
constructor(context, signature, signatureTrack) {
|
|
21
|
+
_SignatureTrackAdapter_instances.add(this);
|
|
22
|
+
_SignatureTrackAdapter_terminator.set(this, new Terminator());
|
|
23
|
+
_SignatureTrackAdapter_context.set(this, void 0);
|
|
24
|
+
_SignatureTrackAdapter_signature.set(this, void 0);
|
|
25
|
+
_SignatureTrackAdapter_signatureTrack.set(this, void 0);
|
|
26
|
+
_SignatureTrackAdapter_adapters.set(this, void 0);
|
|
27
|
+
__classPrivateFieldSet(this, _SignatureTrackAdapter_context, context, "f");
|
|
28
|
+
__classPrivateFieldSet(this, _SignatureTrackAdapter_signature, signature, "f");
|
|
29
|
+
__classPrivateFieldSet(this, _SignatureTrackAdapter_signatureTrack, signatureTrack, "f");
|
|
30
|
+
this.changeNotifier = new Notifier();
|
|
31
|
+
__classPrivateFieldSet(this, _SignatureTrackAdapter_adapters, __classPrivateFieldGet(this, _SignatureTrackAdapter_terminator, "f").own(IndexedBoxAdapterCollection.create(__classPrivateFieldGet(this, _SignatureTrackAdapter_signatureTrack, "f").events, box => context.boxAdapters.adapterFor(box, SignatureEventBoxAdapter), Pointers.SignatureAutomation)), "f");
|
|
32
|
+
__classPrivateFieldGet(this, _SignatureTrackAdapter_terminator, "f").ownAll(__classPrivateFieldGet(this, _SignatureTrackAdapter_signature, "f").subscribe(() => this.dispatchChange()), __classPrivateFieldGet(this, _SignatureTrackAdapter_signatureTrack, "f").enabled.subscribe(() => this.dispatchChange()), __classPrivateFieldGet(this, _SignatureTrackAdapter_adapters, "f").subscribe({
|
|
33
|
+
onAdd: (_adapter) => this.changeNotifier.notify(),
|
|
34
|
+
onRemove: (_adapter) => this.changeNotifier.notify(),
|
|
35
|
+
onReorder: (_adapter) => this.changeNotifier.notify()
|
|
36
|
+
}));
|
|
37
|
+
}
|
|
38
|
+
subscribe(observer) { return this.changeNotifier.subscribe(observer); }
|
|
39
|
+
get context() { return __classPrivateFieldGet(this, _SignatureTrackAdapter_context, "f"); }
|
|
40
|
+
get enabled() { return __classPrivateFieldGet(this, _SignatureTrackAdapter_signatureTrack, "f").enabled.getValue(); }
|
|
41
|
+
get object() { return __classPrivateFieldGet(this, _SignatureTrackAdapter_signatureTrack, "f"); }
|
|
42
|
+
get size() { return __classPrivateFieldGet(this, _SignatureTrackAdapter_adapters, "f").size(); }
|
|
43
|
+
get storageSignature() {
|
|
44
|
+
const { nominator, denominator } = __classPrivateFieldGet(this, _SignatureTrackAdapter_signature, "f");
|
|
45
|
+
return [nominator.getValue(), denominator.getValue()];
|
|
46
|
+
}
|
|
47
|
+
dispatchChange() { this.changeNotifier.notify(); }
|
|
48
|
+
signatureAt(position) {
|
|
49
|
+
position = Math.max(0, position);
|
|
50
|
+
let result = this.storageSignature;
|
|
51
|
+
for (const { accumulatedPpqn, nominator, denominator } of this.iterateAll()) {
|
|
52
|
+
if (accumulatedPpqn > position) {
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
result = [nominator, denominator];
|
|
56
|
+
}
|
|
57
|
+
return result;
|
|
58
|
+
}
|
|
59
|
+
*iterateAll() {
|
|
60
|
+
let accumulatedPpqn = 0;
|
|
61
|
+
let accumulatedBars = 0;
|
|
62
|
+
let [nominator, denominator] = this.storageSignature;
|
|
63
|
+
yield { index: -1, accumulatedPpqn, accumulatedBars, nominator, denominator };
|
|
64
|
+
if (!__classPrivateFieldGet(this, _SignatureTrackAdapter_signatureTrack, "f").enabled.getValue()) {
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
for (const adapter of __classPrivateFieldGet(this, _SignatureTrackAdapter_adapters, "f").adapters()) {
|
|
68
|
+
accumulatedPpqn += PPQN.fromSignature(nominator, denominator) * adapter.relativePosition;
|
|
69
|
+
accumulatedBars += adapter.relativePosition;
|
|
70
|
+
nominator = adapter.nominator;
|
|
71
|
+
denominator = adapter.denominator;
|
|
72
|
+
yield { index: adapter.index, accumulatedPpqn, accumulatedBars, nominator, denominator };
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
changeSignature(nominator, denominator) {
|
|
76
|
+
const originalEvents = Array.from(this.iterateAll()).slice(1);
|
|
77
|
+
const originalPositions = originalEvents.map(e => e.accumulatedPpqn);
|
|
78
|
+
__classPrivateFieldGet(this, _SignatureTrackAdapter_signature, "f").nominator.setValue(nominator);
|
|
79
|
+
__classPrivateFieldGet(this, _SignatureTrackAdapter_signature, "f").denominator.setValue(denominator);
|
|
80
|
+
// Recalculate each event's relativePosition to preserve approximate absolute positions.
|
|
81
|
+
let accumulatedPpqn = 0.0;
|
|
82
|
+
let accumulatedFraction = 0.0;
|
|
83
|
+
let durationBar = PPQN.fromSignature(nominator, denominator);
|
|
84
|
+
for (let i = 0; i < originalEvents.length; i++) {
|
|
85
|
+
const event = originalEvents[i];
|
|
86
|
+
const adapter = this.adapterAt(event.index);
|
|
87
|
+
if (adapter.isEmpty()) {
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
const targetPpqn = originalPositions[i];
|
|
91
|
+
const barsFrac = (targetPpqn - accumulatedPpqn) / durationBar;
|
|
92
|
+
const barsInt = Math.floor(barsFrac);
|
|
93
|
+
const fraction = barsFrac - barsInt;
|
|
94
|
+
accumulatedFraction += fraction;
|
|
95
|
+
let relativePosition = barsInt;
|
|
96
|
+
if (accumulatedFraction >= 1.0) {
|
|
97
|
+
relativePosition++;
|
|
98
|
+
accumulatedFraction--;
|
|
99
|
+
}
|
|
100
|
+
relativePosition = Math.max(1, relativePosition);
|
|
101
|
+
adapter.unwrap().box.relativePosition.setValue(relativePosition);
|
|
102
|
+
accumulatedPpqn += relativePosition * durationBar;
|
|
103
|
+
durationBar = PPQN.fromSignature(event.nominator, event.denominator);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
deleteAdapter(adapter) {
|
|
107
|
+
const deleteIndex = adapter.index;
|
|
108
|
+
const allEvents = Array.from(this.iterateAll()).slice(1);
|
|
109
|
+
const deleteEventIndex = allEvents.findIndex(e => e.index === deleteIndex);
|
|
110
|
+
if (deleteEventIndex === -1) {
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
// Capture original ppqn positions of events AFTER the deleted one
|
|
114
|
+
const eventsAfter = allEvents.slice(deleteEventIndex + 1);
|
|
115
|
+
const originalPositions = eventsAfter.map(e => e.accumulatedPpqn);
|
|
116
|
+
// Determine the signature that will precede the remaining events
|
|
117
|
+
const prevEvent = deleteEventIndex > 0 ? allEvents[deleteEventIndex - 1] : null;
|
|
118
|
+
const [prevNom, prevDenom] = prevEvent !== null
|
|
119
|
+
? [prevEvent.nominator, prevEvent.denominator]
|
|
120
|
+
: this.storageSignature;
|
|
121
|
+
const prevAccumulatedPpqn = prevEvent !== null ? prevEvent.accumulatedPpqn : 0.0;
|
|
122
|
+
adapter.box.delete();
|
|
123
|
+
// Recalculate relativePositions for events after the deleted one using round()
|
|
124
|
+
let accumulatedPpqn = prevAccumulatedPpqn;
|
|
125
|
+
let durationBar = PPQN.fromSignature(prevNom, prevDenom);
|
|
126
|
+
for (let i = 0; i < eventsAfter.length; i++) {
|
|
127
|
+
const event = eventsAfter[i];
|
|
128
|
+
const eventAdapter = this.adapterAt(event.index);
|
|
129
|
+
if (eventAdapter.isEmpty()) {
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
132
|
+
const targetPpqn = originalPositions[i];
|
|
133
|
+
const exactBars = (targetPpqn - accumulatedPpqn) / durationBar;
|
|
134
|
+
const relativePosition = Math.max(1, Math.round(exactBars));
|
|
135
|
+
eventAdapter.unwrap().box.relativePosition.setValue(relativePosition);
|
|
136
|
+
accumulatedPpqn += relativePosition * durationBar;
|
|
137
|
+
durationBar = PPQN.fromSignature(event.nominator, event.denominator);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
createEvent(position, nominator, denominator) {
|
|
141
|
+
const allEvents = Array.from(this.iterateAll());
|
|
142
|
+
let prevEvent = allEvents[0];
|
|
143
|
+
let insertAfterIndex = 0;
|
|
144
|
+
for (let i = 1; i < allEvents.length; i++) {
|
|
145
|
+
if (allEvents[i].accumulatedPpqn > position) {
|
|
146
|
+
break;
|
|
147
|
+
}
|
|
148
|
+
prevEvent = allEvents[i];
|
|
149
|
+
insertAfterIndex = i;
|
|
150
|
+
}
|
|
151
|
+
const prevBarPpqn = PPQN.fromSignature(prevEvent.nominator, prevEvent.denominator);
|
|
152
|
+
const barsFromPrev = (position - prevEvent.accumulatedPpqn) / prevBarPpqn;
|
|
153
|
+
const newRelativePosition = Math.max(1, Math.round(barsFromPrev));
|
|
154
|
+
const newIndex = prevEvent.index + 1;
|
|
155
|
+
const successorEvents = allEvents.slice(insertAfterIndex + 1);
|
|
156
|
+
const newEventPpqn = prevEvent.accumulatedPpqn + newRelativePosition * prevBarPpqn;
|
|
157
|
+
const newBarPpqn = PPQN.fromSignature(nominator, denominator);
|
|
158
|
+
const adaptersToUpdate = successorEvents
|
|
159
|
+
.map(event => ({ event, adapter: this.adapterAt(event.index) }))
|
|
160
|
+
.filter(({ adapter }) => adapter.nonEmpty())
|
|
161
|
+
.map(({ event, adapter }) => ({ event, adapter: adapter.unwrap() }));
|
|
162
|
+
for (let i = 0; i < adaptersToUpdate.length; i++) {
|
|
163
|
+
const { event, adapter } = adaptersToUpdate[i];
|
|
164
|
+
adapter.box.index.setValue(event.index + 1);
|
|
165
|
+
if (i === 0) {
|
|
166
|
+
const barsToNext = (event.accumulatedPpqn - newEventPpqn) / newBarPpqn;
|
|
167
|
+
adapter.box.relativePosition.setValue(Math.max(1, Math.round(barsToNext)));
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
SignatureEventBox.create(__classPrivateFieldGet(this, _SignatureTrackAdapter_context, "f").boxGraph, UUID.generate(), box => {
|
|
171
|
+
box.index.setValue(newIndex);
|
|
172
|
+
box.relativePosition.setValue(newRelativePosition);
|
|
173
|
+
box.nominator.setValue(nominator);
|
|
174
|
+
box.denominator.setValue(denominator);
|
|
175
|
+
box.events.refer(__classPrivateFieldGet(this, _SignatureTrackAdapter_signatureTrack, "f").events);
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
adapterAt(index) { return __classPrivateFieldGet(this, _SignatureTrackAdapter_adapters, "f").getAdapterByIndex(index); }
|
|
179
|
+
moveEvent(adapter, targetPpqn) {
|
|
180
|
+
const allEvents = Array.from(this.iterateAll()).slice(1);
|
|
181
|
+
const movedIdx = allEvents.findIndex(e => e.index === adapter.index);
|
|
182
|
+
if (movedIdx === -1) {
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
const movedEvent = allEvents[movedIdx];
|
|
186
|
+
if (targetPpqn === movedEvent.accumulatedPpqn) {
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
const originalBars = allEvents.map(e => e.accumulatedBars);
|
|
190
|
+
const targetBar = __classPrivateFieldGet(this, _SignatureTrackAdapter_instances, "m", _SignatureTrackAdapter_ppqnToBar).call(this, targetPpqn, movedEvent.index);
|
|
191
|
+
if (targetBar === movedEvent.accumulatedBars) {
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
const newBars = [...originalBars];
|
|
195
|
+
newBars[movedIdx] = targetBar;
|
|
196
|
+
const sortedIndices = newBars
|
|
197
|
+
.map((bar, i) => ({ bar, i }))
|
|
198
|
+
.sort((a, b) => a.bar - b.bar)
|
|
199
|
+
.map(x => x.i);
|
|
200
|
+
const adapters = allEvents.map(e => this.adapterAt(e.index).unwrap());
|
|
201
|
+
for (let newIdx = 0; newIdx < sortedIndices.length; newIdx++) {
|
|
202
|
+
adapters[sortedIndices[newIdx]].box.index.setValue(newIdx);
|
|
203
|
+
}
|
|
204
|
+
let prevBar = 0;
|
|
205
|
+
for (let i = 0; i < sortedIndices.length; i++) {
|
|
206
|
+
const origIdx = sortedIndices[i];
|
|
207
|
+
const eventAdapter = adapters[origIdx];
|
|
208
|
+
const bar = newBars[origIdx];
|
|
209
|
+
const relPos = Math.max(1, bar - prevBar);
|
|
210
|
+
eventAdapter.box.relativePosition.setValue(relPos);
|
|
211
|
+
prevBar = bar;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
floorToBar(position) {
|
|
215
|
+
const { event, barPpqn } = __classPrivateFieldGet(this, _SignatureTrackAdapter_instances, "m", _SignatureTrackAdapter_findSignatureEventAt).call(this, position);
|
|
216
|
+
const barsFromEvent = Math.floor((position - event.accumulatedPpqn) / barPpqn);
|
|
217
|
+
return event.accumulatedPpqn + barsFromEvent * barPpqn;
|
|
218
|
+
}
|
|
219
|
+
ceilToBar(position) {
|
|
220
|
+
const { event, barPpqn } = __classPrivateFieldGet(this, _SignatureTrackAdapter_instances, "m", _SignatureTrackAdapter_findSignatureEventAt).call(this, position);
|
|
221
|
+
const barsFromEvent = Math.ceil((position - event.accumulatedPpqn) / barPpqn);
|
|
222
|
+
return event.accumulatedPpqn + barsFromEvent * barPpqn;
|
|
223
|
+
}
|
|
224
|
+
roundToBar(position) {
|
|
225
|
+
const { event, barPpqn } = __classPrivateFieldGet(this, _SignatureTrackAdapter_instances, "m", _SignatureTrackAdapter_findSignatureEventAt).call(this, position);
|
|
226
|
+
const barsFromEvent = Math.round((position - event.accumulatedPpqn) / barPpqn);
|
|
227
|
+
return event.accumulatedPpqn + barsFromEvent * barPpqn;
|
|
228
|
+
}
|
|
229
|
+
barLengthAt(position) {
|
|
230
|
+
const [nom, denom] = this.signatureAt(position);
|
|
231
|
+
return PPQN.fromSignature(nom, denom);
|
|
232
|
+
}
|
|
233
|
+
getBarInterval(position) {
|
|
234
|
+
const { event, barPpqn } = __classPrivateFieldGet(this, _SignatureTrackAdapter_instances, "m", _SignatureTrackAdapter_findSignatureEventAt).call(this, position);
|
|
235
|
+
const barsFromEvent = Math.floor((position - event.accumulatedPpqn) / barPpqn);
|
|
236
|
+
const start = event.accumulatedPpqn + barsFromEvent * barPpqn;
|
|
237
|
+
return { position: start, complete: start + barPpqn };
|
|
238
|
+
}
|
|
239
|
+
terminate() { __classPrivateFieldGet(this, _SignatureTrackAdapter_terminator, "f").terminate(); }
|
|
240
|
+
}
|
|
241
|
+
_SignatureTrackAdapter_terminator = new WeakMap(), _SignatureTrackAdapter_context = new WeakMap(), _SignatureTrackAdapter_signature = new WeakMap(), _SignatureTrackAdapter_signatureTrack = new WeakMap(), _SignatureTrackAdapter_adapters = new WeakMap(), _SignatureTrackAdapter_instances = new WeakSet(), _SignatureTrackAdapter_ppqnToBar = function _SignatureTrackAdapter_ppqnToBar(position, excludeIndex) {
|
|
242
|
+
let prevEvent = null;
|
|
243
|
+
for (const event of this.iterateAll()) {
|
|
244
|
+
if (event.index === excludeIndex) {
|
|
245
|
+
continue;
|
|
246
|
+
}
|
|
247
|
+
if (event.accumulatedPpqn > position) {
|
|
248
|
+
break;
|
|
249
|
+
}
|
|
250
|
+
prevEvent = event;
|
|
251
|
+
}
|
|
252
|
+
if (isNull(prevEvent)) {
|
|
253
|
+
const [nom, denom] = this.storageSignature;
|
|
254
|
+
const barPpqn = PPQN.fromSignature(nom, denom);
|
|
255
|
+
return Math.max(1, Math.round(position / barPpqn));
|
|
256
|
+
}
|
|
257
|
+
const barPpqn = PPQN.fromSignature(prevEvent.nominator, prevEvent.denominator);
|
|
258
|
+
const barsFromEvent = Math.round((position - prevEvent.accumulatedPpqn) / barPpqn);
|
|
259
|
+
return Math.max(1, prevEvent.accumulatedBars + barsFromEvent);
|
|
260
|
+
}, _SignatureTrackAdapter_findSignatureEventAt = function _SignatureTrackAdapter_findSignatureEventAt(position) {
|
|
261
|
+
let prevEvent = null;
|
|
262
|
+
for (const event of this.iterateAll()) {
|
|
263
|
+
if (event.accumulatedPpqn > position) {
|
|
264
|
+
break;
|
|
265
|
+
}
|
|
266
|
+
prevEvent = event;
|
|
267
|
+
}
|
|
268
|
+
if (isNull(prevEvent)) {
|
|
269
|
+
const [nominator, denominator] = this.storageSignature;
|
|
270
|
+
return {
|
|
271
|
+
event: { index: -1, accumulatedPpqn: 0, accumulatedBars: 0, nominator, denominator },
|
|
272
|
+
barPpqn: PPQN.fromSignature(nominator, denominator)
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
return {
|
|
276
|
+
event: prevEvent,
|
|
277
|
+
barPpqn: PPQN.fromSignature(prevEvent.nominator, prevEvent.denominator)
|
|
278
|
+
};
|
|
279
|
+
};
|
|
@@ -1,20 +1,25 @@
|
|
|
1
1
|
import { TimelineBox } from "@opendaw/studio-boxes";
|
|
2
|
-
import { int, Observer, Subscription, UUID } from "@opendaw/lib-std";
|
|
2
|
+
import { int, ObservableOption, Observer, Option, Subscription, UUID } from "@opendaw/lib-std";
|
|
3
3
|
import { Address } from "@opendaw/lib-box";
|
|
4
4
|
import { BoxAdapter } from "../BoxAdapter";
|
|
5
5
|
import { MarkerTrackAdapter } from "./MarkerTrackAdapter";
|
|
6
|
+
import { SignatureTrackAdapter } from "./SignatureTrackAdapter";
|
|
6
7
|
import { BoxAdaptersContext } from "../BoxAdaptersContext";
|
|
7
8
|
import { ppqn } from "@opendaw/lib-dsp";
|
|
9
|
+
import { ValueEventCollectionBoxAdapter } from "./collection/ValueEventCollectionBoxAdapter";
|
|
8
10
|
export declare class TimelineBoxAdapter implements BoxAdapter {
|
|
9
11
|
#private;
|
|
10
12
|
constructor(context: BoxAdaptersContext, box: TimelineBox);
|
|
11
|
-
|
|
13
|
+
catchupAndSubscribeTempoAutomation(observer: Observer<Option<ValueEventCollectionBoxAdapter>>): Subscription;
|
|
12
14
|
get box(): TimelineBox;
|
|
13
15
|
get uuid(): UUID.Bytes;
|
|
14
16
|
get address(): Address;
|
|
15
17
|
get markerTrack(): MarkerTrackAdapter;
|
|
18
|
+
get signatureTrack(): SignatureTrackAdapter;
|
|
19
|
+
get tempoTrackEvents(): ObservableOption<ValueEventCollectionBoxAdapter>;
|
|
16
20
|
get signature(): Readonly<[int, int]>;
|
|
17
21
|
get signatureDuration(): ppqn;
|
|
18
22
|
catchupAndSubscribeSignature(observer: Observer<Readonly<[int, int]>>): Subscription;
|
|
23
|
+
terminate(): void;
|
|
19
24
|
}
|
|
20
25
|
//# sourceMappingURL=TimelineBoxAdapter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TimelineBoxAdapter.d.ts","sourceRoot":"","sources":["../../src/timeline/TimelineBoxAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,uBAAuB,CAAA;AACjD,OAAO,
|
|
1
|
+
{"version":3,"file":"TimelineBoxAdapter.d.ts","sourceRoot":"","sources":["../../src/timeline/TimelineBoxAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,uBAAuB,CAAA;AACjD,OAAO,EACH,GAAG,EAGH,gBAAgB,EAChB,QAAQ,EACR,MAAM,EACN,YAAY,EAEZ,IAAI,EACP,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAC,OAAO,EAAC,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAA;AACxC,OAAO,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAC,qBAAqB,EAAC,MAAM,yBAAyB,CAAA;AAC7D,OAAO,EAAC,kBAAkB,EAAC,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAO,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAC,8BAA8B,EAAC,MAAM,6CAA6C,CAAA;AAE1F,qBAAa,kBAAmB,YAAW,UAAU;;gBAUrC,OAAO,EAAE,kBAAkB,EAAE,GAAG,EAAE,WAAW;IA4BzD,kCAAkC,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC,GAAG,YAAY;IAK5G,IAAI,GAAG,IAAI,WAAW,CAAmB;IACzC,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAgC;IACtD,IAAI,OAAO,IAAI,OAAO,CAA2B;IACjD,IAAI,WAAW,IAAI,kBAAkB,CAA2B;IAChE,IAAI,cAAc,IAAI,qBAAqB,CAA8B;IACzE,IAAI,gBAAgB,IAAI,gBAAgB,CAAC,8BAA8B,CAAC,CAAgC;IACxG,IAAI,SAAS,IAAI,QAAQ,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAGpC;IACD,IAAI,iBAAiB,IAAI,IAAI,CAG5B;IAED,4BAA4B,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,YAAY;IAKpF,SAAS,IAAI,IAAI;CAcpB"}
|
|
@@ -9,25 +9,69 @@ 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 _TimelineBoxAdapter_box, _TimelineBoxAdapter_markerTrack;
|
|
12
|
+
var _TimelineBoxAdapter_terminator, _TimelineBoxAdapter_box, _TimelineBoxAdapter_markerTrack, _TimelineBoxAdapter_signatureTrack, _TimelineBoxAdapter_tempoTrackEvents, _TimelineBoxAdapter_tempoAutomation, _TimelineBoxAdapter_resolveTempoAutomation;
|
|
13
|
+
import { MutableObservableOption, Notifier, Option, Terminator } from "@opendaw/lib-std";
|
|
13
14
|
import { MarkerTrackAdapter } from "./MarkerTrackAdapter";
|
|
15
|
+
import { SignatureTrackAdapter } from "./SignatureTrackAdapter";
|
|
14
16
|
import { PPQN } from "@opendaw/lib-dsp";
|
|
17
|
+
import { ValueEventCollectionBoxAdapter } from "./collection/ValueEventCollectionBoxAdapter";
|
|
15
18
|
export class TimelineBoxAdapter {
|
|
16
19
|
constructor(context, box) {
|
|
20
|
+
_TimelineBoxAdapter_terminator.set(this, new Terminator());
|
|
17
21
|
_TimelineBoxAdapter_box.set(this, void 0);
|
|
18
22
|
_TimelineBoxAdapter_markerTrack.set(this, void 0);
|
|
23
|
+
_TimelineBoxAdapter_signatureTrack.set(this, void 0);
|
|
24
|
+
_TimelineBoxAdapter_tempoTrackEvents.set(this, void 0);
|
|
25
|
+
_TimelineBoxAdapter_tempoAutomation.set(this, void 0);
|
|
26
|
+
_TimelineBoxAdapter_resolveTempoAutomation.set(this, () => {
|
|
27
|
+
const { tempoTrack: { enabled } } = __classPrivateFieldGet(this, _TimelineBoxAdapter_box, "f");
|
|
28
|
+
if (!enabled.getValue()) {
|
|
29
|
+
return Option.None;
|
|
30
|
+
}
|
|
31
|
+
else if (__classPrivateFieldGet(this, _TimelineBoxAdapter_tempoTrackEvents, "f").isEmpty()) {
|
|
32
|
+
return Option.None;
|
|
33
|
+
}
|
|
34
|
+
else if (__classPrivateFieldGet(this, _TimelineBoxAdapter_tempoTrackEvents, "f").unwrap().events.isEmpty()) {
|
|
35
|
+
return Option.None;
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
return (__classPrivateFieldGet(this, _TimelineBoxAdapter_tempoTrackEvents, "f"));
|
|
39
|
+
}
|
|
40
|
+
});
|
|
19
41
|
__classPrivateFieldSet(this, _TimelineBoxAdapter_box, box, "f");
|
|
20
|
-
__classPrivateFieldSet(this, _TimelineBoxAdapter_markerTrack, new MarkerTrackAdapter(context,
|
|
42
|
+
__classPrivateFieldSet(this, _TimelineBoxAdapter_markerTrack, new MarkerTrackAdapter(context, box.markerTrack), "f");
|
|
43
|
+
__classPrivateFieldSet(this, _TimelineBoxAdapter_signatureTrack, new SignatureTrackAdapter(context, box.signature, box.signatureTrack), "f");
|
|
44
|
+
__classPrivateFieldSet(this, _TimelineBoxAdapter_tempoTrackEvents, new MutableObservableOption(), "f");
|
|
45
|
+
__classPrivateFieldSet(this, _TimelineBoxAdapter_tempoAutomation, new Notifier(), "f");
|
|
46
|
+
const tempoAutomationLifecycle = __classPrivateFieldGet(this, _TimelineBoxAdapter_terminator, "f").own(new Terminator());
|
|
47
|
+
const updateTempoAutomation = () => __classPrivateFieldGet(this, _TimelineBoxAdapter_tempoAutomation, "f").notify(__classPrivateFieldGet(this, _TimelineBoxAdapter_resolveTempoAutomation, "f").call(this));
|
|
48
|
+
const { tempoTrack: { events, enabled } } = box;
|
|
49
|
+
__classPrivateFieldGet(this, _TimelineBoxAdapter_terminator, "f").own(events.catchupAndSubscribe(({ targetVertex }) => {
|
|
50
|
+
tempoAutomationLifecycle.terminate();
|
|
51
|
+
targetVertex.match({
|
|
52
|
+
none: () => __classPrivateFieldGet(this, _TimelineBoxAdapter_tempoTrackEvents, "f").clear(),
|
|
53
|
+
some: ({ box }) => {
|
|
54
|
+
const eventCollectionAdapter = context.boxAdapters.adapterFor(box, ValueEventCollectionBoxAdapter);
|
|
55
|
+
__classPrivateFieldGet(this, _TimelineBoxAdapter_tempoTrackEvents, "f").wrap(eventCollectionAdapter);
|
|
56
|
+
tempoAutomationLifecycle.ownAll(eventCollectionAdapter.subscribeChange(updateTempoAutomation), enabled.subscribe(updateTempoAutomation));
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
}));
|
|
60
|
+
}
|
|
61
|
+
// For dsp. It does not care why events are not available. We just send Option.None if disabled or no events present.
|
|
62
|
+
catchupAndSubscribeTempoAutomation(observer) {
|
|
63
|
+
observer(__classPrivateFieldGet(this, _TimelineBoxAdapter_resolveTempoAutomation, "f").call(this));
|
|
64
|
+
return __classPrivateFieldGet(this, _TimelineBoxAdapter_tempoAutomation, "f").subscribe(observer);
|
|
21
65
|
}
|
|
22
|
-
terminate() { }
|
|
23
66
|
get box() { return __classPrivateFieldGet(this, _TimelineBoxAdapter_box, "f"); }
|
|
24
67
|
get uuid() { return __classPrivateFieldGet(this, _TimelineBoxAdapter_box, "f").address.uuid; }
|
|
25
68
|
get address() { return __classPrivateFieldGet(this, _TimelineBoxAdapter_box, "f").address; }
|
|
26
69
|
get markerTrack() { return __classPrivateFieldGet(this, _TimelineBoxAdapter_markerTrack, "f"); }
|
|
70
|
+
get signatureTrack() { return __classPrivateFieldGet(this, _TimelineBoxAdapter_signatureTrack, "f"); }
|
|
71
|
+
get tempoTrackEvents() { return __classPrivateFieldGet(this, _TimelineBoxAdapter_tempoTrackEvents, "f"); }
|
|
27
72
|
get signature() {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
];
|
|
73
|
+
const { nominator, denominator } = __classPrivateFieldGet(this, _TimelineBoxAdapter_box, "f").signature;
|
|
74
|
+
return [nominator.getValue(), denominator.getValue()];
|
|
31
75
|
}
|
|
32
76
|
get signatureDuration() {
|
|
33
77
|
const { nominator, denominator } = __classPrivateFieldGet(this, _TimelineBoxAdapter_box, "f").signature;
|
|
@@ -37,5 +81,6 @@ export class TimelineBoxAdapter {
|
|
|
37
81
|
observer(this.signature);
|
|
38
82
|
return __classPrivateFieldGet(this, _TimelineBoxAdapter_box, "f").signature.subscribe(() => observer(this.signature));
|
|
39
83
|
}
|
|
84
|
+
terminate() { __classPrivateFieldGet(this, _TimelineBoxAdapter_terminator, "f").terminate(); }
|
|
40
85
|
}
|
|
41
|
-
_TimelineBoxAdapter_box = new WeakMap(), _TimelineBoxAdapter_markerTrack = new WeakMap();
|
|
86
|
+
_TimelineBoxAdapter_terminator = new WeakMap(), _TimelineBoxAdapter_box = new WeakMap(), _TimelineBoxAdapter_markerTrack = new WeakMap(), _TimelineBoxAdapter_signatureTrack = new WeakMap(), _TimelineBoxAdapter_tempoTrackEvents = new WeakMap(), _TimelineBoxAdapter_tempoAutomation = new WeakMap(), _TimelineBoxAdapter_resolveTempoAutomation = new WeakMap();
|
|
@@ -13,6 +13,7 @@ export declare class TrackBoxAdapter implements BoxAdapter {
|
|
|
13
13
|
#private;
|
|
14
14
|
constructor(context: BoxAdaptersContext, box: TrackBox);
|
|
15
15
|
catchupAndSubscribePath(observer: Observer<Option<[string, string]>>): Subscription;
|
|
16
|
+
get context(): BoxAdaptersContext;
|
|
16
17
|
set targetDeviceName(value: string);
|
|
17
18
|
get targetDeviceName(): Option<string>;
|
|
18
19
|
terminate(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TrackBoxAdapter.d.ts","sourceRoot":"","sources":["../../src/timeline/TrackBoxAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,GAAG,EAEH,QAAQ,EACR,MAAM,EAEN,YAAY,EAGZ,SAAS,EACT,IAAI,EACP,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAc,MAAM,kBAAkB,CAAA;AAC7F,OAAO,EAAC,IAAI,EAAkB,MAAM,kBAAkB,CAAA;AACtD,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAA;AACxC,OAAO,EAAC,kBAAkB,EAAC,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAA;AACvC,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAA;AAE3C,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAA;AACrC,OAAO,EAAC,iBAAiB,EAAE,mBAAmB,EAAC,MAAM,sBAAsB,CAAA;AAG3E,OAAO,EAAC,YAAY,EAAE,QAAQ,EAAC,MAAM,uBAAuB,CAAA;AAC5D,OAAO,EAAC,QAAQ,EAAC,MAAM,uBAAuB,CAAA;AAE9C,qBAAa,eAAgB,YAAW,UAAU;;gBAWlC,OAAO,EAAE,kBAAkB,EAAE,GAAG,EAAE,QAAQ;IAUtD,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,YAAY;IAuBnF,IAAI,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAUjC;IAED,IAAI,gBAAgB,IAAI,MAAM,CAAC,MAAM,CAAC,CAYrC;IAoDD,SAAS;IAET,IAAI,SAAS,IAAI,YAAY,CAAgF;IAC7G,IAAI,MAAM,IAAI,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,CAA0B;IACzE,IAAI,KAAK,IAAI,UAAU,CAAqB;IAC5C,IAAI,OAAO,IAAI,YAAY,CAAuB;IAClD,IAAI,OAAO,IAAI,YAAY,CAA2B;IACtD,IAAI,UAAU,IAAI,UAAU,CAAyB;IACrD,IAAI,IAAI,IAAI,SAAS,CAAmC;IACxD,IAAI,GAAG,IAAI,QAAQ,CAAmB;IACtC,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAgC;IACtD,IAAI,OAAO,IAAI,OAAO,CAA2B;IAEjD,IAAI,SAAS,IAAI,GAAG,CAAoC;IACxD,IAAI,SAAS,CAAC,KAAK,EAAE,GAAG,EAAmC;IAE3D,OAAO,CAAC,OAAO,EAAE,iBAAiB,GAAG,mBAAmB,GAAG,OAAO;IAiBlE,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,GAAG,SAAS;CAgC1D"}
|
|
1
|
+
{"version":3,"file":"TrackBoxAdapter.d.ts","sourceRoot":"","sources":["../../src/timeline/TrackBoxAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,GAAG,EAEH,QAAQ,EACR,MAAM,EAEN,YAAY,EAGZ,SAAS,EACT,IAAI,EACP,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAc,MAAM,kBAAkB,CAAA;AAC7F,OAAO,EAAC,IAAI,EAAkB,MAAM,kBAAkB,CAAA;AACtD,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAA;AACxC,OAAO,EAAC,kBAAkB,EAAC,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAA;AACvC,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAA;AAE3C,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAA;AACrC,OAAO,EAAC,iBAAiB,EAAE,mBAAmB,EAAC,MAAM,sBAAsB,CAAA;AAG3E,OAAO,EAAC,YAAY,EAAE,QAAQ,EAAC,MAAM,uBAAuB,CAAA;AAC5D,OAAO,EAAC,QAAQ,EAAC,MAAM,uBAAuB,CAAA;AAE9C,qBAAa,eAAgB,YAAW,UAAU;;gBAWlC,OAAO,EAAE,kBAAkB,EAAE,GAAG,EAAE,QAAQ;IAUtD,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,YAAY;IAuBnF,IAAI,OAAO,IAAI,kBAAkB,CAAuB;IAExD,IAAI,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAUjC;IAED,IAAI,gBAAgB,IAAI,MAAM,CAAC,MAAM,CAAC,CAYrC;IAoDD,SAAS;IAET,IAAI,SAAS,IAAI,YAAY,CAAgF;IAC7G,IAAI,MAAM,IAAI,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,CAA0B;IACzE,IAAI,KAAK,IAAI,UAAU,CAAqB;IAC5C,IAAI,OAAO,IAAI,YAAY,CAAuB;IAClD,IAAI,OAAO,IAAI,YAAY,CAA2B;IACtD,IAAI,UAAU,IAAI,UAAU,CAAyB;IACrD,IAAI,IAAI,IAAI,SAAS,CAAmC;IACxD,IAAI,GAAG,IAAI,QAAQ,CAAmB;IACtC,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAgC;IACtD,IAAI,OAAO,IAAI,OAAO,CAA2B;IAEjD,IAAI,SAAS,IAAI,GAAG,CAAoC;IACxD,IAAI,SAAS,CAAC,KAAK,EAAE,GAAG,EAAmC;IAE3D,OAAO,CAAC,OAAO,EAAE,iBAAiB,GAAG,mBAAmB,GAAG,OAAO;IAiBlE,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,GAAG,SAAS;CAgC1D"}
|
|
@@ -60,6 +60,7 @@ export class TrackBoxAdapter {
|
|
|
60
60
|
updater();
|
|
61
61
|
}));
|
|
62
62
|
}
|
|
63
|
+
get context() { return __classPrivateFieldGet(this, _TrackBoxAdapter_context, "f"); }
|
|
63
64
|
set targetDeviceName(value) {
|
|
64
65
|
__classPrivateFieldGet(this, _TrackBoxAdapter_box, "f").target.targetVertex.ifSome(targetVertex => {
|
|
65
66
|
const vertex = targetVertex.box;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { EventCollection, ppqn, TimeBase } from "@opendaw/lib-dsp";
|
|
2
|
-
import { int, Maybe, MutableObservableValue, ObservableOption, ObservableValue, Observer, Option, Subscription, UUID
|
|
2
|
+
import { int, Maybe, MutableObservableValue, ObservableOption, ObservableValue, Observer, Option, Subscription, UUID } from "@opendaw/lib-std";
|
|
3
3
|
import { AudioClipBox } from "@opendaw/studio-boxes";
|
|
4
4
|
import { Address, Int32Field } from "@opendaw/lib-box";
|
|
5
5
|
import { ClipBoxAdapter, ClipBoxAdapterVisitor } from "../ClipBoxAdapter";
|
|
@@ -13,7 +13,6 @@ import { AudioTimeStretchBoxAdapter } from "../../audio/AudioTimeStretchBoxAdapt
|
|
|
13
13
|
import { WarpMarkerBoxAdapter } from "../../audio/WarpMarkerBoxAdapter";
|
|
14
14
|
export declare class AudioClipBoxAdapter implements AudioContentBoxAdapter, ClipBoxAdapter<never> {
|
|
15
15
|
#private;
|
|
16
|
-
static readonly STATIC_POSITION: ValueOwner<number>;
|
|
17
16
|
readonly type = "audio-clip";
|
|
18
17
|
constructor(context: BoxAdaptersContext, box: AudioClipBox);
|
|
19
18
|
catchupAndSubscribeSelected(observer: Observer<ObservableValue<boolean>>): Subscription;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AudioClipBoxAdapter.d.ts","sourceRoot":"","sources":["../../../src/timeline/clip/AudioClipBoxAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAE,IAAI,EAAQ,QAAQ,EAAoB,MAAM,kBAAkB,CAAA;AACzF,OAAO,EAGH,GAAG,EAEH,KAAK,EAEL,sBAAsB,EAEtB,gBAAgB,EAChB,eAAe,EACf,QAAQ,EACR,MAAM,EAEN,YAAY,EAGZ,IAAI,
|
|
1
|
+
{"version":3,"file":"AudioClipBoxAdapter.d.ts","sourceRoot":"","sources":["../../../src/timeline/clip/AudioClipBoxAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -39,7 +39,7 @@ export class AudioClipBoxAdapter {
|
|
|
39
39
|
__classPrivateFieldSet(this, _AudioClipBoxAdapter_isConstructing, true, "f");
|
|
40
40
|
__classPrivateFieldSet(this, _AudioClipBoxAdapter_playMode, new MutableObservableOption(), "f");
|
|
41
41
|
__classPrivateFieldSet(this, _AudioClipBoxAdapter_selectedValue, __classPrivateFieldGet(this, _AudioClipBoxAdapter_terminator, "f").own(new DefaultObservableValue(false)), "f");
|
|
42
|
-
__classPrivateFieldSet(this, _AudioClipBoxAdapter_durationConverter, TimeBaseConverter.aware(context.tempoMap, box.timeBase,
|
|
42
|
+
__classPrivateFieldSet(this, _AudioClipBoxAdapter_durationConverter, TimeBaseConverter.aware(context.tempoMap, box.timeBase, box.duration), "f");
|
|
43
43
|
__classPrivateFieldSet(this, _AudioClipBoxAdapter_changeNotifier, __classPrivateFieldGet(this, _AudioClipBoxAdapter_terminator, "f").own(new Notifier()), "f");
|
|
44
44
|
__classPrivateFieldGet(this, _AudioClipBoxAdapter_terminator, "f").ownAll(__classPrivateFieldGet(this, _AudioClipBoxAdapter_box, "f").pointerHub.subscribe({
|
|
45
45
|
onAdded: () => __classPrivateFieldGet(this, _AudioClipBoxAdapter_instances, "m", _AudioClipBoxAdapter_dispatchChange).call(this),
|
|
@@ -91,8 +91,8 @@ export class AudioClipBoxAdapter {
|
|
|
91
91
|
get uuid() { return __classPrivateFieldGet(this, _AudioClipBoxAdapter_box, "f").address.uuid; }
|
|
92
92
|
get address() { return __classPrivateFieldGet(this, _AudioClipBoxAdapter_box, "f").address; }
|
|
93
93
|
get indexField() { return __classPrivateFieldGet(this, _AudioClipBoxAdapter_box, "f").index; }
|
|
94
|
-
get duration() { return __classPrivateFieldGet(this, _AudioClipBoxAdapter_durationConverter, "f").toPPQN(); }
|
|
95
|
-
set duration(value) { __classPrivateFieldGet(this, _AudioClipBoxAdapter_durationConverter, "f").fromPPQN(value); }
|
|
94
|
+
get duration() { return __classPrivateFieldGet(this, _AudioClipBoxAdapter_durationConverter, "f").toPPQN(0); }
|
|
95
|
+
set duration(value) { __classPrivateFieldGet(this, _AudioClipBoxAdapter_durationConverter, "f").fromPPQN(value, 0); }
|
|
96
96
|
get mute() { return __classPrivateFieldGet(this, _AudioClipBoxAdapter_box, "f").mute.getValue(); }
|
|
97
97
|
get hue() { return __classPrivateFieldGet(this, _AudioClipBoxAdapter_box, "f").hue.getValue(); }
|
|
98
98
|
get gain() { return __classPrivateFieldGet(this, _AudioClipBoxAdapter_box, "f").gain; }
|
|
@@ -148,4 +148,3 @@ _AudioClipBoxAdapter_terminator = new WeakMap(), _AudioClipBoxAdapter_context =
|
|
|
148
148
|
__classPrivateFieldGet(this, _AudioClipBoxAdapter_changeNotifier, "f").notify();
|
|
149
149
|
this.trackBoxAdapter.unwrapOrNull()?.clips?.dispatchChange();
|
|
150
150
|
};
|
|
151
|
-
AudioClipBoxAdapter.STATIC_POSITION = { getValue: () => 0 };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NoteEventCollectionBoxAdapter.d.ts","sourceRoot":"","sources":["../../../src/timeline/collection/NoteEventCollectionBoxAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,sBAAsB,EAAC,MAAM,uBAAuB,CAAA;AAC1E,OAAO,EACH,WAAW,EACX,KAAK,EACL,GAAG,
|
|
1
|
+
{"version":3,"file":"NoteEventCollectionBoxAdapter.d.ts","sourceRoot":"","sources":["../../../src/timeline/collection/NoteEventCollectionBoxAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,sBAAsB,EAAC,MAAM,uBAAuB,CAAA;AAC1E,OAAO,EACH,WAAW,EACX,KAAK,EACL,GAAG,EAGH,QAAQ,EACR,iBAAiB,EAEjB,YAAY,EAEZ,IAAI,EACP,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAC,OAAO,EAAC,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAC,eAAe,EAAa,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAEjE,OAAO,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAC,mBAAmB,EAAC,MAAM,8BAA8B,CAAA;AAChE,OAAO,EAAC,kBAAkB,EAAC,MAAM,0BAA0B,CAAA;AAE3D,KAAK,iBAAiB,GAAG;IACrB,QAAQ,EAAE,IAAI,CAAA;IACd,QAAQ,EAAE,IAAI,CAAA;IACd,KAAK,EAAE,GAAG,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,KAAK,CAAA;IACf,MAAM,EAAE,GAAG,CAAA;IACX,SAAS,EAAE,GAAG,CAAA;CACjB,CAAA;AAED,qBAAa,6BAA8B,YAAW,UAAU,EAAE,iBAAiB,CAAC,mBAAmB,EAAE,IAAI,EAAE,GAAG,CAAC;;gBAenG,OAAO,EAAE,kBAAkB,EAAE,GAAG,EAAE,sBAAsB;IA2BpE,IAAI,IAAI,6BAA6B;IAOrC,WAAW,CACP,EAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAC,EAAE,iBAAiB,GAAG,mBAAmB;IAa3G,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,YAAY;IAEvD,UAAU,IAAI,QAAQ,CAAC,mBAAmB,CAAC;IAE3C,YAAY,CAAC,WAAW,EAAE,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,QAAQ,CAAC,mBAAmB,CAAC;IAShF,kBAAkB,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,QAAQ,CAAC,mBAAmB,CAAC;IAa7G,cAAc,IAAI,IAAI;IAKtB,sBAAsB,IAAI,IAAI;IAE9B,SAAS;IAET,IAAI,GAAG,IAAI,sBAAsB,CAAmB;IACpD,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAgC;IACtD,IAAI,OAAO,IAAI,OAAO,CAA2B;IACjD,IAAI,SAAS,IAAI,GAAG,CAAiF;IACrG,IAAI,MAAM,IAAI,eAAe,CAAC,mBAAmB,CAAC,CAKjD;IAED,IAAI,QAAQ,IAAI,GAAG,CAGlB;IACD,IAAI,QAAQ,IAAI,GAAG,CAGlB;IACD,IAAI,WAAW,IAAI,MAAM,CAGxB;IAED,QAAQ,IAAI,MAAM;CAqBrB"}
|