docs(phase-s): spec three-view editor redesign (S-VIEW) — Sample/Browse/Zone
This commit is contained in:
@@ -965,6 +965,119 @@ adds only the identity fork on top.
|
||||
|
||||
---
|
||||
|
||||
### Addendum — three-view editor model + drop-to-FX + default window size (Daniel, 2026-07-27, r9)
|
||||
|
||||
**Framing.** Daniel opened a fresh design pass on the ReaSampler 9000 **editor** after living
|
||||
with the S10–S18 UX in the DAW. The instrument *works* and the capture browser is genuinely
|
||||
good — but the two-view editor (today's "Browser" + "Zones" toggle) misallocates its space,
|
||||
the default window is undersized for a 1080p world, and the drop-a-capture-onto-FX gesture is
|
||||
broken in practice. The directive: **make the one job — pick a capture, tune it, play it —
|
||||
fast, easy, and fun. Style is a critical ingredient. No spreadsheet aesthetics.** These are the
|
||||
`r9` calls. Authoritative spec: **CONTEXT.md §Phase S — editor view-model redesign (S-VIEW)**;
|
||||
build roadmap: **PLAN.md §Phase S — editor view-model redesign**.
|
||||
|
||||
**The reference devices (the north star for control density).** Daniel named Ableton **Simpler**
|
||||
and a Kilohearts/Phase-Plant **sampler group** as the composition targets. Both share one
|
||||
grammar, and it is the grammar the redesign adopts:
|
||||
|
||||
- **A large waveform up top is the hero**, with markers and the envelope drawn *over it at
|
||||
accurate time* — not a separate abstract envelope box. Simpler shades the sustain-loop region
|
||||
teal directly on the waveform; Phase Plant traces the amp envelope as a bright curve across the
|
||||
sample. The waveform is where the eye lives.
|
||||
- **A thin, dense value-strip of labelled controls** sits under the waveform (Simpler's
|
||||
Gain/Start/Loop/Length/Fade ribbon; Phase Plant's LEVEL/SEMI/HARMONIC/SHIFT/PHASE row) — bold
|
||||
ALL-CAPS micro-labels over a value, compact, scannable in one pass.
|
||||
- **Root note is fenced off as its own affordance** (Phase Plant boxes "Root C 4 +00" and an
|
||||
"Offset" knob to the right; Simpler puts Key% and Transp in the pitch cluster). Root is not
|
||||
buried in a list of sliders — it is a first-class, always-visible control.
|
||||
- **Modular horizontal bands.** Each concern (sample/pitch, then envelope) is its own band with
|
||||
its own drawn visual. This is how both devices avoid the spreadsheet look: every band leads
|
||||
with a *picture* (waveform, filter curve, envelope shape), and the numbers hang off it.
|
||||
|
||||
**The three calls (r9).**
|
||||
|
||||
1. **Three views, not two — and they are NOT a flat toggle.** Today "Browser" and "Zone" sit as
|
||||
two equal segments. That framing is wrong: it implies the browser and the zone editor are
|
||||
peers, when in truth **the loaded sample is the home** and browsing/zoning are things you
|
||||
*reach for*. So: **Sample is the home view** (the default face — the hero waveform, the
|
||||
envelope overlay, all the per-sample controls). **Browse** is a **modal page layered over
|
||||
Sample** — a full-window overlay you summon to change the loaded capture (select + confirm),
|
||||
the way a file-open sheet layers over a document. **Zone** is a **dedicated editing surface**
|
||||
opened by its own button when you want to map across the keyboard. This is a
|
||||
*document-with-modal-picker* model (Simpler's own shape: the device face is the sample, and
|
||||
loading a new one is a distinct act), not a three-way radio. *Why the reframe matters:* it
|
||||
makes "I just want to play this capture" the zero-click default, and "I want a different one"
|
||||
a single deliberate gesture, instead of making the user re-choose their whole stance every
|
||||
time. See CONTEXT.md §S-VIEW for the precise navigation model.
|
||||
|
||||
2. **The Sample view earns the hero treatment; Browse gets ruthlessly cut.** Browse today
|
||||
carries a waveform preview, root-note piano-roll, loop-point labels, a track-root message, and
|
||||
a Mono/Stereo toggle — all of which are *tuning* concerns, not *choosing* concerns. Browse's
|
||||
only job is **pick a capture**; the grid thumbnails already show the waveform, so every one of
|
||||
those tuning affordances moves to Sample (where the hero waveform lives) and Browse shrinks to
|
||||
filters + grid + select/confirm. Conversely, Sample **gains a new envelope overlay** drawn on
|
||||
the hero waveform at accurate time (the Simpler/Phase-Plant move), a **preview-trigger button +
|
||||
velocity knob** (audition the sample at its root without a MIDI controller — the single most
|
||||
"fun/fast" affordance the current editor lacks), and inherits the Mono/Stereo toggle and every
|
||||
"Modes-and-down" control that lives on Zone today.
|
||||
|
||||
3. **Two engineering prerequisites, framed but routed to implementation.** The **drop-to-FX bug**
|
||||
(dropping a capture onto a track's FX chain does not instantiate + init ReaSampler 9000) and
|
||||
the **undersized default window** are not design decisions — they are a bug and a one-line
|
||||
default. Both are framed in CONTEXT.md §S-VIEW with the SDK reality swept (drop-to-FX: the S17
|
||||
machinery is SDK-correct, so this is a *diagnosis* task, not a redesign; window size: the
|
||||
`getSize`/`checkSizeConstraint` mechanism is verified), and both are flagged for
|
||||
staff-engineer, not for a product fork.
|
||||
|
||||
**New parameters this introduces (both instrument performance state, D-B — never bank facts):**
|
||||
|
||||
- **Key-tracking (Zone view).** A 0%–200% scalar on how sample pitch tracks the keyboard around
|
||||
the root note. **100% (default) = standard 12-tone equal-temperament tracking** (a semitone up
|
||||
the keyboard = a semitone of repitch — exactly today's behavior). 0% = the sample plays at root
|
||||
pitch on every key (a fixed, un-tracked one-shot — the classic drum-machine "no tracking"
|
||||
mode). 200% = double-rate tracking (an octave of keyboard spans two octaves of pitch — an
|
||||
intentional special effect). This is a *per-zone performance choice*, additive on
|
||||
`PerformanceZone`, defaulting to 100% so existing playback is bit-identical. It is the sampler
|
||||
idiom every serious sampler has (RS5K's "Pitch for start/end note", Kontakt's "Tracking",
|
||||
Simpler's "Key %" — visible in the reference screenshot at "Key 100%"). *Why 200% and not
|
||||
higher:* the useful musical range is 0–200%; past 200% it is noise, and a bounded slider reads
|
||||
cleaner than an open one.
|
||||
- **Preview velocity (Sample view).** The velocity level the preview-trigger button fires at,
|
||||
set by an adjacent knob. Not persisted as a musical parameter of the sample — it is a
|
||||
*utility* setting for the audition button (like a metronome level), so it can live as
|
||||
transient editor state or a small persisted convenience; the spec leans transient (see
|
||||
§S-VIEW). This is what makes the preview button *fun*: tap it hard or soft without reaching for
|
||||
a controller.
|
||||
|
||||
**Two visual components the redesign commits to:**
|
||||
|
||||
- **The envelope overlay** on the Sample view's hero waveform: the amp envelope (AHDSR for Gate,
|
||||
the fade/%-length shape for Trigger) drawn as a curve *at accurate wall-clock time* across the
|
||||
waveform, the way Simpler draws its amp envelope over the sample and Phase Plant traces it in
|
||||
bright blue. This is the single biggest "reads like a real sampler, not a spreadsheet" move —
|
||||
the envelope stops being four abstract sliders and becomes a *shape you see over the sound*.
|
||||
The sliders stay (precise entry), but the picture leads.
|
||||
- **The real piano-keyboard pattern** on the Zone view's keyboard strip. Today's spectral strip
|
||||
is pretty but does not *read as a keyboard* — Daniel's note. The redesign keeps the pastel
|
||||
spectral hue but overlays the **actual alternating white/black key pattern** (bright/dark per
|
||||
the palette) so the strip is instantly identifiable as a keyboard. It need not be *shaped* like
|
||||
a keyboard (no protruding black keys) — just carry the pattern as an overlay, so a glance reads
|
||||
"this is C, this is F#" without counting.
|
||||
|
||||
**What does NOT change (guardrails restated).** The instrument stays a **read-only bank
|
||||
consumer** — every new control (key-tracking, preview velocity, the loop/start markers Sample
|
||||
inherits) is *performance map*, never written to `Sample` or the bank (D-B). LICE/SWELL drawing
|
||||
only, all layout/hit-test in pure geometry modules (D-A). RT discipline untouched — the
|
||||
preview-trigger fires a note through the same voice engine off the audio-thread commit path, no
|
||||
new audio-thread work. The VST3 class UID is unchanged — a view reorganization is not a compat
|
||||
event. And this is an *editor* redesign: the S3 voice engine, the keymap resolution, the
|
||||
component-state format (extended additively for key-tracking) are the same load-bearing core.
|
||||
|
||||
**Where the spec lives:** CONTEXT.md §Phase S — editor view-model redesign (S-VIEW); PLAN.md
|
||||
§Phase S — editor view-model redesign. This Addendum is the *why*; those are the *what/how*.
|
||||
|
||||
---
|
||||
|
||||
## Where this landed
|
||||
|
||||
With D1/D5/D6 locked and **D-A..D-D all settled (2026-07-26)**, the instrument is scoped
|
||||
|
||||
Reference in New Issue
Block a user