Merge dev into phase-psi: take Ξ-W3 before Ψ lands
# Conflicts: # docs/COMPLETED.md # docs/TODO.md
This commit is contained in:
@@ -474,6 +474,44 @@ bitmap and confirmed to place the stroke correctly, or it is redesigned to raste
|
||||
physical rather than logical resolution once `IPlugViewContentScaleSupport` (or
|
||||
equivalent) makes scaling real.
|
||||
|
||||
## The loop intrinsic is folded twice: the bank blob and the instance ref can skew
|
||||
|
||||
**Context (what shipped).** Two call sites answer the same question — "does this capture
|
||||
have a sustain loop, and where?" — by different routes, and both are load-bearing:
|
||||
|
||||
- `ReaSamplerEditor::pickedMarkers` (`shell/instrument/editor_session.cpp`) resolves the
|
||||
intrinsic from the **live bank blob** first (`selectSample`), falling back to the
|
||||
instance-owned `SampleRefs` only when the blob is unreadable, then lets
|
||||
`params_.loopOverride` supersede it.
|
||||
- `ReaSamplerProcessor::reloadInstrument` (`shell/instrument/processor_reload.cpp`)
|
||||
resolves it from the **instance ref** via `resolveCapture`, which is the one
|
||||
override-beats-intrinsic fold, and that is what the bake renders and what
|
||||
`bakeWindowNeedsHold` is ultimately asked about.
|
||||
|
||||
**The wart.** The two can disagree whenever the bank blob's loop for a capture differs
|
||||
from the copy in the instance's own refs table — a recapture that moved the loop points,
|
||||
a hand-edited blob, or an instance that predates the current bank state. The face then
|
||||
draws (and the Hold predicate answers about) one loop while the engine plays another.
|
||||
|
||||
**Pre-existing.** This split predates the derived-bake-window work; the bake-Hold
|
||||
predicate is only a new *consumer* of `pickedMarkers`, not the origin of the divergence.
|
||||
|
||||
**Intended fix.** Route `pickedMarkers` through `resolveCapture` so both sites share the
|
||||
one fold, as the bank/refs paths already do elsewhere.
|
||||
|
||||
**The constraint the fix MUST handle.** `pickedMarkers` runs on the editor's mouse-down
|
||||
arbitration path (every waveform click, not just marker grabs) and deliberately skips its
|
||||
bridge read once an override is set; a unified fold must not put a bank read back on that
|
||||
path. It must also keep the browser-source semantics: the bank is where a *new* capture's
|
||||
intrinsics come from, the refs table is where the *loaded* one's live.
|
||||
|
||||
**Priority / risk.** Low. Needs a recapture-moved-the-loop scenario to observe, and the
|
||||
failure is a mis-drawn marker or a spuriously shown/hidden Hold knob, not bad audio.
|
||||
|
||||
**Done looks like.** One fold answers the intrinsic for both the editor's markers and the
|
||||
engine's reload, with a test that moves the bank's loop out from under a loaded instance
|
||||
and shows the two agreeing.
|
||||
|
||||
## `ingestHandleSectionCommand` has no unit test
|
||||
|
||||
**Context (what shipped — Ψ-W1-T3, media-explorer-section).** The Media-Explorer
|
||||
|
||||
Reference in New Issue
Block a user