Bake window: derived note lengths carry exact durations, not ladder rungs — a long take is no longer cut at 384 beats
Hold keeps its picker. Also: one home for the %-fold, duration-ordered Hold travel, and a corrupt tail degrades to absent rather than fabricating one.
This commit is contained in:
@@ -342,9 +342,22 @@ private:
|
||||
|
||||
// Whether the loaded sound's bake window needs the user's Hold — the pure predicate
|
||||
// (bake_plan.h) answered against the markers this face is showing. Decodes and reads the
|
||||
// bank, so it is called on the sync tick, not per paint.
|
||||
// bank, so it is called on the sync tick, not per paint, and memoized against the inputs
|
||||
// below on top of that.
|
||||
bool resolveBakeHoldNeeded();
|
||||
|
||||
// What that answer was last computed against. Invalidated wholesale by refreshFromBank,
|
||||
// which is where the bank half of the input changes.
|
||||
struct HoldNeedKey {
|
||||
std::string sampleId;
|
||||
std::optional<SampleLoop> loopOverride;
|
||||
std::int64_t crossfade = 0;
|
||||
bool operator==(const HoldNeedKey& other) const;
|
||||
};
|
||||
HoldNeedKey holdNeedKey_;
|
||||
bool holdNeedValid_ = false;
|
||||
bool holdNeedAnswer_ = false;
|
||||
|
||||
// Writes `m` into params_ as the loop/start override. Does NOT call commitAndReload —
|
||||
// callers decide live-drag vs final commit.
|
||||
void applyMarkers(const SetupMarkers& m);
|
||||
|
||||
Reference in New Issue
Block a user