From 32785606d4936da3879837430d5b1d7638648108 Mon Sep 17 00:00:00 2001 From: daniel-c-harvey Date: Tue, 28 Jul 2026 20:04:59 -0400 Subject: [PATCH] =?UTF-8?q?docs(TODO-1.0):=20item=2014=20=E2=80=94=20Trigg?= =?UTF-8?q?er-mode=20amp=20fades=20replaced=20by=20AHD=20with=20curves;=20?= =?UTF-8?q?amp=20envelope=20shape=20follows=20playback=20mode?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TODO-1.0.md | 131 +++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 125 insertions(+), 6 deletions(-) diff --git a/TODO-1.0.md b/TODO-1.0.md index 4c8556a..906b04c 100644 --- a/TODO-1.0.md +++ b/TODO-1.0.md @@ -2,7 +2,8 @@ Post-1.0 queue for ReaSampler — chiefly the 9000 instrument, plus two extension-side bugs. Items 1–3 are the first batch, in Daniel's ordering -(2026-07-28); items 4–13 are a second batch (2026-07-28, later the same day). +(2026-07-28); items 4–13 are a second batch (2026-07-28, later the same day); +item 14 is a third, single-item batch (2026-07-28, later again). Deliberately specified at the level of product intent, user-visible behavior, and acceptance criteria — **no implementation design, no file/module references**. These were authored while Phase Q was @@ -47,13 +48,25 @@ 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 +1:1-overlay/combined-bound policy. **With that, no open question then in the +doc awaited a Daniel decision.** Everything still marked open in items 1–13 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. +check. Nothing in items 1–13 is blocked on Daniel. + +A **third batch** (2026-07-28, later again) appends item 14 — a single +consolidation enhancement: in Trigger mode the amp envelope's +fade-in-length/fade-out-length pair is replaced by item 8's AHD (with item 1's +curves), so the amp envelope's staged shape follows the playback mode — +Gate → AHDSR, Trigger → AHD. Item 8's sustain-stage scope rule then covers the +amp envelope literally, not just by analogy (a one-line cross-reference is +added there). Item 14 carries **one question awaiting a Daniel decision** — +whether item 2's filter AHDSR follows the same mode-driven shape — so the doc +is no longer decision-clean. Its other open question (stage-value state across +the Gate/Trigger switch) is propose-at-implementation-review, not +Daniel-blocking. 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 @@ -68,7 +81,10 @@ loop-sustain is a Gate-mode (Staged) feature and composes with item 3's Gate-unavailable-in-Spline rule. Item 13 (anti-aliasing audit) touches nearly every surface the other items repaint — sequencing it after the layout/knob work (1, 8, 10, 11, 12) likely avoids doing the polish twice; that is an -observation, not a decision. +observation, not a decision. Item 14 (third batch) rides directly on item 8's +AHD definition and item 1's curve treatment — cheapest folded into or +immediately after that combined work — and repaints amp-deck/overlay surface +that items 10 and 13 later polish. --- @@ -638,7 +654,9 @@ change that turns the pitch envelope from AD into AHD**. into or immediately after that work; item 1's sloped-segment rule reads Attack and Decay for the pitch AHD (Hold is flat, no curve dial). Item 3's Spline overlays are unaffected by construction: a spline always spans the - full sample width already. + full sample width already. Item 14 extends the AHD to the amp envelope's + Trigger mode, so this scope rule selects by the envelope's current shape + under the active playback mode — see item 14. **Open questions.** @@ -904,3 +922,104 @@ high-DPI, high-resolution displays. Daniel named the visibly pixely surfaces: - The audit produces a short disposition list: surfaces checked, which needed work, which were already clean. - Daniel signs off by eye on the named surfaces. + +--- + +## 14 — Enhancement: Trigger-mode amp envelope — fade-in/fade-out replaced by the AHD (with curves) + +**Daniel's ask (verbatim, 2026-07-28).** + +> the amp env trigger mode fade in length fade out changes to the AHD envelope +> (with curves of course), to reduce code for the same thing, and consolidate +> under the new design. + +**Intent.** Consolidation. In Trigger mode the amp envelope's fade-in-length / +fade-out-length pair is retired and replaced by the same three-stage +Attack → Hold → Decay envelope item 8 specifies for the pitch envelope — with +item 1's per-segment curves. Daniel's stated motive is reducing code for the +same job: one staged-envelope design covering what is currently two separate +mechanisms doing the same thing. The product consequence: **the amp envelope's +staged shape follows the playback mode** — Gate → AHDSR (sustain, +right-anchored release, per item 8); Trigger → AHD (sustain-less). + +**Behavior.** + +- **Trigger mode: fades out, AHD in.** In Trigger mode the amp envelope is an + AHD per item 8's definition: Hold spans 0–100% of the time remaining after + Attack and Decay, so A + H + D ≤ sample length holds by construction and the + overlay is 1:1 with the waveform's time axis. The fade-in-length and + fade-out-length controls go away in Trigger mode; Attack and Decay carry + those roles under the new design. +- **With curves.** The Trigger AHD's sloped segments — Attack and Decay; Hold + is flat, as everywhere — get item 1's full curve treatment: exponent 0.1–10, + inner dials, mid-segment overlay knots, tertiary-purple rendering. +- **Gate mode unchanged.** In Gate mode the amp envelope remains the AHDSR + with item 8's right-anchored release. Item 9's loop-sustain spec (a + Gate-mode feature) is untouched. +- **Item 8's scope rule now covers the amp envelope literally.** Item 8 + settled that the 1:1-overlay property and the by-construction combined-time + bound apply to envelopes **without a sustain stage**, and the + right-anchored-release policy to those **with** one — Daniel's rationale: + "the 1:1 mapping only makes sense for trigger, not gated envelopes." With + this item the amp envelope in Trigger mode *is* sustain-less, so it takes + the 1:1 time-mapped overlay automatically; in Gate mode it keeps the + right-anchored release. The rationale now describes the amp envelope + directly, not just by analogy: the rule selects by the envelope's **current + shape under the active playback mode**, not by which processor the envelope + modulates. No new rule is needed — item 8's rule already decides both cases. +- **Pre-existing instances reopen sounding identical.** The doc's standing + migration framing (items 1, 2, 11) applies: a project saved before this + change reopens with unchanged audible behavior — in particular, a Trigger + instance's prior fade-in/fade-out contour is reproduced by the loaded AHD. + The evident mapping (Attack ← fade-in, Decay ← fade-out, Hold ← the full + remainder, curve exponents at whatever value reproduces the prior fade + shape) is a verify-at-implementation detail, not a Daniel call; the gate + below states the requirement. A prior zero fade-out is Decay = 0 — the + abrupt end stays representable, so nothing the old controls could express + is lost. +- **Cross-references.** Item 8 supplies the AHD definition and the scope rule + (this item is that rule's second consumer); item 1 supplies the curves — + sequencing: cheapest folded into or immediately after that combined work. + Item 3 is unaffected in Spline mode (a spline already plays as a + full-sample-length time function — the trigger model); its "save but + inactive" dual-state precedent bears on the second open question below. + Item 4's Trigger × Preserve end-of-sample click sits in the region the + fade-out currently governs — whichever of the two lands first, item 4's + gate must be re-verified under the surviving mechanism. + +**Open questions.** + +- **Does the filter AHDSR follow the same mode-driven shape?** Item 2's + filter envelope is the same staged machinery, so Gate → AHDSR / + Trigger → AHD would extend naturally — but Daniel said this only for the + amp envelope, and it is not asserted here. **Awaits a Daniel decision** — + currently the doc's only Daniel-pending question. +- **Stage-value state across the Gate/Trigger switch — shared or per-mode?** + The Gate AHDSR and Trigger AHD share stage names (A, H, D); whether they + share *values* (one envelope whose S and R fall away in Trigger) or keep + per-mode state (item 3's "save but inactive" dual-state precedent) is + unspecified. Migration leans per-mode: an old instance carries both its + AHDSR values and its Trigger fade values, and a shared-value model cannot + preserve both modes' prior sound at once. Resolve at implementation review + with a proposal — not Daniel-blocking, but the sound-identical gate must + hold for whichever mode a saved instance plays in. + +**Acceptance criteria.** + +- In Trigger mode the amp deck shows Attack / Hold / Decay — no fade-in or + fade-out control anywhere in Trigger mode — with curve inner dials on + Attack and Decay and none on Hold; when the amp envelope is overlay-active + (item 1's radio), its overlay is 1:1 with the waveform time axis, and no + combination of A, H, D settings exceeds the sample length (Hold = 100% + exactly fills it — by construction, no clamp). +- In Gate mode the amp envelope is the unchanged AHDSR: sustain stage, + right-anchored release per item 8. +- Switching between Gate and Trigger playback switches the amp envelope + surface (deck and overlay) between AHDSR and AHD accordingly. +- A project saved before this change reopens sounding identical: a Trigger + instance's prior fade-in/fade-out contour — including a zero fade-out's + abrupt end — is audibly reproduced by the loaded AHD. +- The Trigger amp AHD behaves stage-for-stage like item 8's pitch AHD — Hold + semantics, curve treatment, and overlay mapping match. (This is the + observable proxy for the consolidation motive: one staged-envelope design, + two consumers.)