docs: record FB1 r11 Sample-view recompose + master gain (v8); move S-VIEW-11/12 to COMPLETED; correct stale r11 zero-state-change line
This commit is contained in:
@@ -2672,3 +2672,69 @@ stale full-range zone shadowing so the engine plays the zone the editor draws. C
|
||||
voice-param rebuild via drain-slot swap (no disk I/O).
|
||||
- [x] `ComponentState` envelope v6→v7; `voiceCount`/`voiceMode`/`monoTrigger` on `ComponentState`;
|
||||
back-compat lift in `deserializeComponentState`.
|
||||
|
||||
---
|
||||
|
||||
## FB1 — Sample-view recomposition + master gain (r11; 2026-07-27)
|
||||
|
||||
> **Merged to dev 2026-07-27. Integrated suite 55/55 green.** S-VIEW-11 + S-VIEW-12 from the
|
||||
> Wave B plan. No corresponding PLAN.md points remain for these two; S-VIEW-13 (Zone-panel
|
||||
> parity) stays open in PLAN.md.
|
||||
|
||||
**Goal:** Recompose the S-VIEW Sample face after Daniel's post-landing DAW pass — radial knobs
|
||||
in fenced groups, compact mode toggles, full-width elastic hero, curve preview button → popup.
|
||||
Also adds a post-mixer master gain control (MASTER group, −∞…+24 dB) as a new persisted field.
|
||||
**Verify:** Integrated suite 55/55 green. Sample face renders knob deck with correct group
|
||||
geometry; hero runs full-width (elastic, 840×620 preserved); curve popup opens/dismisses; right-
|
||||
click on a node in the popup deletes it (endpoint-guarded); master gain knob adjusts output level
|
||||
and persists across project save/reopen; pre-v8 blobs lift to unity gain.
|
||||
|
||||
- [x] **`knob_deck` pure module** (`src/vst/knob_deck.{h,cpp}`): group-box / caption-row /
|
||||
compact-toggle / knob-cell geometry; deterministic whole-group wrap (a group that doesn't fit
|
||||
the remaining row width starts a new deck row); `DeckLayout` / `DeckHit` structs; blank
|
||||
reserved cells (id −1 for AMP ENVELOPE's 5-cell stability). Mirror of `action_bar`/
|
||||
`param_slider`; no LICE or REAPER types. New CTest target `knob_deck_tests`.
|
||||
- [x] **`curve_popup` pure module** (`src/vst/curve_popup.{h,cpp}`): centered sheet geometry —
|
||||
width `clamp(60% window, 360..520)`, height `clamp(55% window, 260..380)`; title row + 18×18
|
||||
Close button rect; curve-box rect (border rect; shell applies `curveBoxFromRect` inset);
|
||||
outside-sheet dismissal test. Mirror of `overflow_menu`; no LICE or REAPER types. New CTest
|
||||
target `curve_popup_tests`.
|
||||
- [x] **`master_gain` pure module** (`src/vst/master_gain.{h,cpp}`): dB↔linear taper math for
|
||||
the −∞…+24 dB master gain knob — `masterGainLinearFromNorm`, `masterGainNormFromLinear`,
|
||||
`masterGainDbFromNorm`, `masterGainNormFromDb`, `formatMasterGainLabel`; norm 0 = true silence
|
||||
(exact 0.0); unity ≈ 0.714 normalized. Shared by the editor knob and the processor multiply
|
||||
so needle, persisted value, and audio multiply cannot drift. No LICE or REAPER types. New
|
||||
CTest target `master_gain_tests`.
|
||||
- [x] **Knob deck shell** (`reasampler_editor.cpp`): Sample control strip rebuilt as five fenced
|
||||
groups — **AMP ENVELOPE** (Gate|Trigger caption toggle; 5-cell width reserved; Gate: Attack ·
|
||||
Hold · Decay · Sustain · Release; Trigger: Fade In · Length % · Fade Out), **PITCH**
|
||||
(Varisp|Preserve caption toggle; Key Track knob), **PITCH ENV** (Off|On caption toggle;
|
||||
P.Attack · P.Decay · P.Depth; Disabled-not-hidden when Off), **VOICE** (Voices knob +
|
||||
Poly|Mono caption toggle + Retrig|Legato row toggle), **MASTER** (Gain knob). Slider rows +
|
||||
full-width toggles retired from the Sample face. Hero band recomputed as elastic (absorbs
|
||||
window height minus fixed bands; floor 150px); deck band bottom-anchored at fixed height via
|
||||
`deckHeight()`.
|
||||
- [x] **Full-width hero** (S-VIEW-12): velocity-curve carve-out removed from hero rect; hero
|
||||
now runs edge-to-edge between the kPad margins. S-VIEW markers (start/loop) + envelope overlay
|
||||
unchanged.
|
||||
- [x] **Curve preview button + popup** (S-VIEW-12): 28×28 miniature curve preview button placed
|
||||
immediately right of the Vel knob in the cluster band; left-click opens the `curve_popup`-
|
||||
geometry centered sheet; **right-click on a node in the popup deletes it** (endpoint-guarded,
|
||||
commits via the same path as Alt-click — `deletePoint` guard makes endpoint right-clicks a safe
|
||||
no-op). Dismiss: Close ×, outside-click (no drag in flight), Esc. All landed curve-editor
|
||||
interactions preserved (drag, click-add, Alt-click delete, drag-off delete).
|
||||
- [x] **Post-mixer master gain** (new): `masterGainLinear` field added to `ComponentState`;
|
||||
`kComponentStateVersion` bumped **v7→v8**; pre-v8 blobs lift to `masterGainLinear = 1.0`
|
||||
(unity). Processor applies the gain as a per-sample ramp over the summed output — no zipper
|
||||
noise. `master_gain` pure module is the shared math seam between the editor knob and the
|
||||
processor multiply.
|
||||
|
||||
**Notes/decisions:**
|
||||
- **Persistence is NOT zero-change.** The CONTEXT.md r11 spec described r11 as a pure view
|
||||
recomposition; master gain added `ComponentState` v8. CONTEXT.md §S-VIEW r11 intro updated to
|
||||
record this correctly (the "zero component-state change, no new persisted fields" clause
|
||||
replaced with a factual note on the v7→v8 bump and the master gain field).
|
||||
- **R11-F1 (hero height) settled at build:** elastic hero, 840×620 default preserved — the
|
||||
hero grows with the window, floor 150px. No window-size change required.
|
||||
- **R11-F2 (Zone-panel parity) deferred to FB2:** S-VIEW-13 remains open in PLAN.md.
|
||||
- New CTest targets: `knob_deck_tests`, `curve_popup_tests`, `master_gain_tests`.
|
||||
|
||||
Reference in New Issue
Block a user