docs(TODO-1.0): fold second answer round — items 1-2 fully settled, item 3 down to point bounds and popup gesture convergence
This commit is contained in:
+101
-35
@@ -15,6 +15,11 @@ ask; settled answers are folded into **Behavior** (marked *settled by
|
||||
follow-up*), and only the genuinely unresolved remainder stays under **Open
|
||||
questions**.
|
||||
|
||||
A **second follow-up round** (2026-07-28, same day) settled nearly all of the
|
||||
remainder. Each item carries that round's verbatim as a third provenance block;
|
||||
answers are folded the same way (marked *settled by second follow-up*). Items 1
|
||||
and 2 now have no open questions; item 3 retains two narrow ones.
|
||||
|
||||
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.
|
||||
@@ -46,6 +51,15 @@ in sequence or together, but 1 and 2 are prerequisites for 3's full surface.
|
||||
> 1.0 the linear neutral" CLAUDE, y=x^1.0 is linear!! of course! yes dragging
|
||||
> on the segment (add a round knot midsegment) adjusts the curve.
|
||||
|
||||
**Daniel's second follow-up (verbatim, 2026-07-28).**
|
||||
|
||||
> default overlay none
|
||||
> what about the curves?
|
||||
|
||||
("what about the curves?" is Daniel turning the pre-existing-instances
|
||||
question back — the answer recorded below is derived from this doc's own
|
||||
acceptance criterion, not a Daniel quote.)
|
||||
|
||||
**Intent.** Grow the envelope-overlay editor from an amp-only fixture into the
|
||||
shared graphical surface for every envelope in the instrument, and give every
|
||||
envelope shapeable (non-linear) segments — while fixing the blue-on-green
|
||||
@@ -61,6 +75,16 @@ contrast failure.
|
||||
displayed envelope. The switch is exclusive: **one overlay-active envelope at
|
||||
a time, or none** — no-envelope-shown is a valid state, not an error.
|
||||
*(Settled by follow-up.)*
|
||||
- **Default overlay: none.** The editor opens with **no envelope selected** —
|
||||
the none-state is the default, replacing today's always-on Amp AHDSR.
|
||||
*(Settled by second follow-up.)*
|
||||
- **Pre-existing instances load at exponent 1.0.** Saved instances from before
|
||||
this change load **every curve at exponent 1.0** — the linear neutral — so
|
||||
their audible envelope behavior is unchanged. *(Derived, not a Daniel quote:
|
||||
1.0 is the settled linear neutral, and the acceptance criterion "a project
|
||||
saved before this change reopens with unchanged audible envelope behavior"
|
||||
admits no other default. Daniel prompted the question; this is the only
|
||||
answer consistent with what he has already settled.)*
|
||||
- **Segment curve values on all envelopes.** Amp AHDSR, Pitch AD, and Filter
|
||||
AHDSR all gain an editable curve value per *sloped* segment. The curve is an
|
||||
exponential function; the per-segment parameter is the exponent scalar,
|
||||
@@ -86,14 +110,8 @@ contrast failure.
|
||||
|
||||
**Open questions.**
|
||||
|
||||
- **Default overlay selection on open.** Exclusivity and the none-state are
|
||||
settled; what is the default when the editor opens — the Amp AHDSR (today's
|
||||
behavior) or none?
|
||||
- **Pre-existing instances.** Should saved instances from before this change
|
||||
load with every curve at the linear equivalent (exponent 1.0) so their sound
|
||||
is unchanged? (The neutral point itself is settled; this is only the
|
||||
load-behavior half. The product requirement is "old instances sound
|
||||
identical.")
|
||||
- None remaining — both prior questions (default overlay selection,
|
||||
pre-existing-instance curve loading) closed by the second follow-up round.
|
||||
|
||||
**Acceptance criteria.**
|
||||
|
||||
@@ -101,6 +119,8 @@ contrast failure.
|
||||
envelope in the overlay, editable there, and the overlay tracks the switch
|
||||
immediately. At most one envelope is overlay-active; with none active, the
|
||||
overlay draws no envelope.
|
||||
- The editor opens with no envelope overlay-active (default is none, not the
|
||||
Amp AHDSR).
|
||||
- Every curvable-segment knob shows the inner dial (inner arc, tertiary-purple
|
||||
hover accent, needle, numeric label); sweeping it through 0.1 → 10 visibly
|
||||
reshapes the overlay segment and audibly reshapes the envelope on played
|
||||
@@ -111,7 +131,7 @@ contrast failure.
|
||||
- Overlay envelope segments render in tertiary purple and are clearly legible
|
||||
against the primary green waveform.
|
||||
- A project saved before this change reopens with unchanged audible envelope
|
||||
behavior.
|
||||
behavior: every curve loads at exponent 1.0.
|
||||
|
||||
---
|
||||
|
||||
@@ -133,6 +153,13 @@ contrast failure.
|
||||
> again, scaled around root 2 at the center. mod amt targets cutoff, -100% -
|
||||
> +100% to cover full range from either end. per-voice. label it "Filter"
|
||||
|
||||
**Daniel's second follow-up (verbatim, 2026-07-28).**
|
||||
|
||||
> oh, zone.
|
||||
> yes, filter is off by default
|
||||
> velocity and keytracking with the rest, not deffered. Same idea as the amp
|
||||
> velocity transfer curve and pitch key tracking
|
||||
|
||||
**Intent.** Add the instrument's first filter stage — resonant high-pass and
|
||||
low-pass — as a new fixed point in the per-voice signal path, with its own
|
||||
AHDSR envelope, and make the knob-deck row read in signal-flow order.
|
||||
@@ -159,6 +186,19 @@ AHDSR envelope, and make the knob-deck row read in signal-flow order.
|
||||
the full range from either end.
|
||||
- **Per-voice.** The filter processes **per voice** — each sounding voice runs
|
||||
its own filter with its own envelope state. *(Settled by follow-up.)*
|
||||
- **Per-zone storage.** The filter's parameters are **stored per-zone**,
|
||||
alongside the other playback parameters — Sample/Zone panel parity applies,
|
||||
same as the existing per-zone controls (VOICE and MASTER remain the
|
||||
per-instance exceptions). *(Settled by second follow-up.)*
|
||||
- **Off by default.** The filter **defaults to off** — pre-existing saved
|
||||
instances and freshly loaded captures sound unchanged until the user engages
|
||||
it. *(Settled by second follow-up.)*
|
||||
- **Velocity and key-tracking modulation — in this item, not deferred.** The
|
||||
filter gains **velocity** and **key-tracking** modulation now, alongside the
|
||||
mod-amt/envelope path: the same idea as the amp's velocity transfer curve
|
||||
and the pitch key-tracking, respectively, applied to the filter. The
|
||||
follow-up establishes the parallel, not new ranges or control layout — those
|
||||
follow the cited precedents. *(Settled by second follow-up.)*
|
||||
- **Label.** The user-facing deck-group label is **"Filter"**. "MM preamp" is
|
||||
working shorthand for the DSP lineage, not UI text. *(Settled by
|
||||
follow-up.)*
|
||||
@@ -167,16 +207,8 @@ AHDSR envelope, and make the knob-deck row read in signal-flow order.
|
||||
|
||||
**Open questions.**
|
||||
|
||||
- **Other mod sources.** Mod amt targeting cutoff is settled; whether any
|
||||
other mod sources (velocity, key-tracking) are in scope now or deferred is
|
||||
unstated.
|
||||
- **Parameter storage: per-zone or per-instance.** Per-voice *processing* is
|
||||
settled, but it is compatible with either storage side. Existing playback
|
||||
parameters live per-zone with Sample/Zone panel parity; VOICE and MASTER are
|
||||
per-instance exceptions. Which side do the filter *parameters* fall on?
|
||||
- **Neutral default.** Should the filter default to a bypass/neutral state so
|
||||
pre-existing saved instances (and freshly loaded captures) sound unchanged
|
||||
until the user engages it?
|
||||
- None remaining — all three prior questions (other mod sources, parameter
|
||||
storage side, neutral default) closed by the second follow-up round.
|
||||
|
||||
**Acceptance criteria.**
|
||||
|
||||
@@ -196,9 +228,16 @@ AHDSR envelope, and make the knob-deck row read in signal-flow order.
|
||||
- Two simultaneously sounding voices at different envelope phases are filtered
|
||||
independently (per-voice processing is audible, not a shared instance-wide
|
||||
filter).
|
||||
- Filter parameters follow Sample/Zone panel parity: they appear and edit on
|
||||
both surfaces, and each zone carries its own filter settings (two zones with
|
||||
different filter settings audibly differ).
|
||||
- Velocity and key-tracking modulation of the filter ship with this item and
|
||||
are audible — velocity following the amp-velocity-transfer-curve pattern,
|
||||
key-tracking following the pitch-key-tracking pattern.
|
||||
- The deck row reads pitch → filter → amp left-to-right.
|
||||
- A project saved before this change reopens sounding identical (pending the
|
||||
neutral-default confirmation above).
|
||||
- The filter is off by default: a project saved before this change reopens
|
||||
sounding identical, and a freshly loaded capture sounds unchanged until the
|
||||
filter is engaged.
|
||||
|
||||
---
|
||||
|
||||
@@ -231,6 +270,13 @@ AHDSR envelope, and make the knob-deck row read in signal-flow order.
|
||||
> the length. all the soft points between any hard points will be
|
||||
> smooth/monotone.
|
||||
|
||||
**Daniel's second follow-up (verbatim, 2026-07-28).**
|
||||
|
||||
> normalize the spline eg length to the full width, it should represent the
|
||||
> time axis of the actual sample visually 1:1
|
||||
> left click add, alt-click delete, cntrl-click toggles point hard or soft.
|
||||
> spline active -> stage knobs disabled.
|
||||
|
||||
**Intent.** Offer a free-drawn alternative to every staged envelope: the user
|
||||
switches any EG from Staged to Spline mode and draws the contour directly, with
|
||||
the monotonic-spline machinery already proven by the velocity curve — enhanced
|
||||
@@ -248,6 +294,21 @@ so sharp corners are possible, not everything smoothed.
|
||||
Spline EG is active**; the spline **always covers the full sample length** —
|
||||
a pure time function over the sample, i.e. the Trigger/one-shot playback
|
||||
model. *(Settled by follow-up.)*
|
||||
- **Time axis: normalized, visually 1:1.** The spline contour is **normalized
|
||||
to the full sample length**, and the overlay represents **the time axis of
|
||||
the actual sample visually 1:1** — the contour's full width maps directly
|
||||
onto the displayed sample. Consequently a different-length capture rescales
|
||||
the stored contour to its own length. *(Settled by second follow-up.)*
|
||||
- **Point-editing grammar.** **Left-click adds a point; alt-click deletes a
|
||||
point; control-click toggles a point hard/smooth.** Alt-click-delete
|
||||
supersedes the earlier speculation that the velocity-curve popup's
|
||||
right-click-delete grammar would be reused. *(Settled by second follow-up;
|
||||
control-click hard/smooth confirms the original ask.)*
|
||||
- **Staged controls disabled while Spline is active.** While a Spline EG is
|
||||
active, that envelope's **staged segment knobs are disabled** — inert, not
|
||||
merely inaudible — including their item-1 inner curve dials (the dial is
|
||||
part of the knob). The dormant staged state is edited only by switching back
|
||||
to Staged mode. *(Settled by second follow-up.)*
|
||||
- **Not globally monotone.** Spline contours **don't have to rise and fall and
|
||||
are not globally monotone**; the monotone guarantee is per-segment — **all
|
||||
soft points between any hard points are smooth/monotone** (no overshoot
|
||||
@@ -277,26 +338,24 @@ so sharp corners are possible, not everything smoothed.
|
||||
|
||||
**Open questions.**
|
||||
|
||||
- **Time-axis storage.** Full-sample coverage is settled ("spline always
|
||||
covers the full sample length"); what remains is only whether the stored
|
||||
contour is normalized to the sample length (so it rescales when a
|
||||
different-length capture loads) or anchored some other way.
|
||||
- **Point-editing grammar.** Point add/delete gestures and any point-count
|
||||
bound are unstated. The velocity-curve popup already established right-click
|
||||
node delete — reuse of that grammar seems natural but is Daniel's call.
|
||||
- **Staged controls while Spline is active.** Sound-wise the staged EG is
|
||||
inactive in Spline mode (settled by dual-state). Still open at the UI level:
|
||||
do the staged segment knobs/inner dials stay editable (editing the dormant
|
||||
staged state) or go inert/greyed until the user switches back?
|
||||
- **Point-count bounds.** The add/delete/toggle gestures are settled, but any
|
||||
minimum/maximum point count is unstated (a floor of two endpoints seems
|
||||
implied by full-length coverage; a ceiling, if any, is Daniel's call).
|
||||
- **Velocity-curve popup gesture convergence.** The Spline-EG grammar is
|
||||
alt-click delete, but the existing velocity-curve popup shipped with
|
||||
right-click node delete. Since the enhanced spline serves both, does the
|
||||
popup migrate to the alt-click grammar for consistency, keep right-click, or
|
||||
accept both?
|
||||
|
||||
**Acceptance criteria.**
|
||||
|
||||
- Each of the pitch, filter, and amp EGs offers a Staged/Spline mode switch;
|
||||
in Spline mode the overlay (via the item-1 radio switch) shows and edits the
|
||||
drawn contour, and played notes audibly follow it.
|
||||
- Control-click toggles any point hard/smooth; points are smooth by default; a
|
||||
hard point renders a visible sharp angle with no smoothing on either
|
||||
adjacent segment, and the discontinuous slope is audible where the
|
||||
- Left-click on the contour adds a point at that position; alt-click on a
|
||||
point deletes it; control-click toggles it hard/smooth. Points are smooth by
|
||||
default; a hard point renders a visible sharp angle with no smoothing on
|
||||
either adjacent segment, and the discontinuous slope is audible where the
|
||||
modulation target makes it so (e.g. a pitch EG corner).
|
||||
- A contour of several segments joined at hard points plays back over the full
|
||||
sample length exactly as drawn — including contours that rise and fall
|
||||
@@ -305,6 +364,13 @@ so sharp corners are possible, not everything smoothed.
|
||||
- A freshly created Spline EG shows the smooth y = 1 − x default contour.
|
||||
- While a Spline EG is active, Gate mode is not selectable; the spline plays
|
||||
as a pure time function over the full sample length.
|
||||
- The overlay contour spans the full displayed sample width, 1:1 with the
|
||||
sample's time axis; loading a different-length capture rescales the contour
|
||||
to the new sample length (normalized storage), with the drawn shape
|
||||
preserved proportionally.
|
||||
- While a Spline EG is active, that envelope's staged segment knobs and their
|
||||
inner curve dials render disabled and reject edits; switching back to Staged
|
||||
re-enables them with values exactly as left.
|
||||
- Staged↔Spline round-trip preserves both states: switch to Spline, draw,
|
||||
switch back — the staged values are exactly as left; switch forward again —
|
||||
the spline contour is exactly as drawn. Both survive save/reload.
|
||||
|
||||
Reference in New Issue
Block a user