docs(TODO-1.0): close item 8 — Hold is a share of the post-A+D remainder, so the length bound holds by construction; 1:1 overlay scoped to sustain-less envelopes
This commit is contained in:
+54
-24
@@ -45,6 +45,16 @@ becomes an **AHD** (a Hold stage is added), and the doc's own prose (items 1
|
||||
and 8) is updated to match — Daniel's verbatim asks stay exactly as originally
|
||||
written.
|
||||
|
||||
A **second-batch second follow-up round** (2026-07-28, same day) closed item
|
||||
8's last two questions — Hold's 0–100% reference, and the scope of the
|
||||
1:1-overlay/combined-bound policy. **With that, no open question anywhere in
|
||||
this doc awaits a Daniel decision.** Everything still marked open is
|
||||
verify-or-propose-at-implementation, not a blocker: item 9's loop-point
|
||||
regression verification and its spec details (crossfade units, storage
|
||||
confirmation, editing surface — each carries its own resolve-at-review path in
|
||||
the item), and item 11's does-a-user-facing-pitch-velocity-curve-already-exist
|
||||
check. Nothing is blocked on Daniel.
|
||||
|
||||
Ordering note: item 1's curve/overlay treatment explicitly anticipates item 2's
|
||||
filter envelope ("filter to be added"), and item 3 layers on both. They can land
|
||||
in sequence or together, but 1 and 2 are prerequisites for 3's full surface.
|
||||
@@ -571,6 +581,12 @@ FX-button path remains unregressed.
|
||||
> to 100%, and the visual overlay for the envelope is then 1:1 scale with the
|
||||
> waveform time. D is not release, so it is not right anchored.
|
||||
|
||||
**Daniel's second follow-up (verbatim, 2026-07-28).**
|
||||
|
||||
> 1) 100% of the sample length - attack+decay times
|
||||
> 2) for all envelopes that DON'T have a sustain stage. The 1:1 mapping only
|
||||
> makes sense for trigger, not gated envelopes
|
||||
|
||||
**Intent.** A layout-policy change to the staged envelope overlay so it uses
|
||||
the full panel width: today, with little or no release, the sustain portion
|
||||
occupies only a small stretch and the whole figure reads off-center. The
|
||||
@@ -594,13 +610,29 @@ change that turns the pitch envelope from AD into AHD**.
|
||||
change, not a clarification. The doc's own prose — here and item 1's
|
||||
sloped-segment reading — is updated to match; Daniel's verbatim asks stay
|
||||
as written.)*
|
||||
- **Hold ranges 0 to 100%.** Of *what* is unstated — see Open questions.
|
||||
- **A + H + D combined cannot exceed the sample length:** the three segment
|
||||
lengths' total time displacement is hard-bounded by the full sample
|
||||
length.
|
||||
- **Because of that bound, the pitch-envelope overlay is 1:1 scale with the
|
||||
waveform time axis** — the drawn envelope maps directly onto the
|
||||
displayed sample's time.
|
||||
- **Hold ranges 0 to 100% of the time remaining after Attack and Decay** —
|
||||
i.e. 100% of (sample length − (attack time + decay time)). At 100%, Hold
|
||||
fills all the remaining time; at 0% it takes none. *(Settled by second
|
||||
follow-up.)*
|
||||
- **The A + H + D ≤ sample-length bound holds by construction**, not by a
|
||||
separate clamp: Hold is expressed as a fraction of what is left after
|
||||
Attack and Decay, so the sum cannot overflow. Daniel's stated bound
|
||||
("the combined A H and D segment lengths cannot exceed the full sample
|
||||
length") is a *property* of the Hold definition, not a constraint to
|
||||
enforce on top of it.
|
||||
- **The overlay is therefore 1:1 scale with the waveform time axis** — the
|
||||
drawn envelope maps directly onto the displayed sample's time.
|
||||
- **Scope rule — split on the sustain stage.** The 1:1-overlay property and
|
||||
the combined-time bound apply to **all envelopes that do NOT have a sustain
|
||||
stage**; envelopes **with** a sustain stage (the amp and filter AHDSRs) get
|
||||
the right-anchored-release policy instead. Daniel's rationale: the 1:1
|
||||
mapping only makes sense for trigger, not gated envelopes — that is the
|
||||
reasoning behind the stage-list rule, not a second competing rule. Today
|
||||
the pitch AHD is the only sustain-less envelope, but the rule is general:
|
||||
it governs any future sustain-less envelope too. The two policies
|
||||
**coexist rather than merge**, split cleanly on whether the envelope has a
|
||||
sustain stage — the prior revision's open reading, now confirmed. *(Settled
|
||||
by second follow-up.)*
|
||||
- **Cross-references.** Item 1 reworks this same overlay surface (radio
|
||||
switch, mid-segment curve knots, recolor) — this item is cheapest folded
|
||||
into or immediately after that work; item 1's sloped-segment rule reads
|
||||
@@ -610,16 +642,11 @@ change that turns the pitch envelope from AD into AHD**.
|
||||
|
||||
**Open questions.**
|
||||
|
||||
- **Hold's 0–100% — percent of what?** Daniel did not say: the full sample
|
||||
length, the time remaining after Attack, or something else. A narrow Daniel
|
||||
call — do not assume at implementation.
|
||||
- **Are the 1:1-overlay property and the A+H+D ≤ sample-length bound
|
||||
pitch-specific, or intended for all staged envelopes?** Daniel stated both
|
||||
in the pitch-AHD context. An AHDSR with a right-anchored release cannot be
|
||||
strictly 1:1 across an indefinite sustain, so the two policies appear to
|
||||
coexist (right-anchoring for envelopes with a release; the 1:1 time-bounded
|
||||
overlay for the pitch AHD) rather than merge — but that is an open reading
|
||||
to confirm, not a settled conclusion.
|
||||
- None remaining — both prior questions (Hold's 0–100% reference; the scope
|
||||
of the 1:1/combined-bound policy) closed by the second-batch second
|
||||
follow-up round. The coexist-vs-merge reading the prior revision flagged is
|
||||
confirmed: the two policies coexist, split cleanly on whether the envelope
|
||||
has a sustain stage.
|
||||
|
||||
**Acceptance criteria.**
|
||||
|
||||
@@ -627,14 +654,17 @@ change that turns the pitch envelope from AD into AHD**.
|
||||
right edge — the overlay reads full-width, not bunched left.
|
||||
- Dragging the sustain→release top node adjusts release; the bottom-right
|
||||
corner is fixed and not draggable.
|
||||
- The envelopes with a release (amp, and filter once present) follow the same
|
||||
anchoring policy; the pitch envelope's Decay is **not** right-anchored.
|
||||
- The envelopes with a sustain stage (amp, and filter once present) follow
|
||||
the same anchoring policy; the pitch envelope's Decay is **not**
|
||||
right-anchored.
|
||||
- The pitch envelope plays and displays three stages — Attack, Hold, Decay —
|
||||
with Hold spanning 0–100% of its (to-be-confirmed) reference; no
|
||||
combination of A, H, and D settings yields a combined time displacement
|
||||
exceeding the sample length.
|
||||
- The pitch-envelope overlay is 1:1 with the waveform's time axis: a stage
|
||||
boundary at N seconds sits over the waveform at N seconds.
|
||||
with Hold spanning 0–100% of the time remaining after Attack and Decay. By
|
||||
construction, no combination of A, H, and D settings yields a combined time
|
||||
displacement exceeding the sample length (at Hold = 100% the three stages
|
||||
exactly fill it) — no separate clamp fires, because none is needed.
|
||||
- The overlay of any sustain-less envelope (today: the pitch AHD) is 1:1 with
|
||||
the waveform's time axis: a stage boundary at N seconds sits over the
|
||||
waveform at N seconds.
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user