Skip to content

The improvements wave: symbolic enums, determinism, delay rebuild, grown surfaces (+ pin repoints) - #62

Merged
tap merged 6 commits into
mainfrom
claude/taptools-book-recipes-vdmgr6
Aug 5, 2026
Merged

The improvements wave: symbolic enums, determinism, delay rebuild, grown surfaces (+ pin repoints)#62
tap merged 6 commits into
mainfrom
claude/taptools-book-recipes-vdmgr6

Conversation

@tap

@tap tap commented Aug 5, 2026

Copy link
Copy Markdown
Owner

What this changes

What began as a one-line pin repoint grew into the Max side of the parallel improvements wave (the branch is the session's designated one, so the wave stacked here — each commit is self-contained):

  • Pin repoints (first and last commits): submodules/taptools tracked kernel main across the Revive TapTools: modern Min + C++20 build, 10 objects, CI on macOS + Windows #27 and Revive TapTools: 46 objects on modern Min + C++20, prune the Jamoma corpse #28 merges, tree-identity verified at each move.
  • §3tap.ladder~/tap.diode~ mode/solver accept both symbols and numbers, getters report symbols (attribute<symbol> + numeric fallback; min-api's native enum attributes report indices and attribute<enum class> is banned per REVIVAL §9.5 — finding recorded in the plan).
  • §4 — determinism: tap.noise~ gains seed (seed 1 bit-identical to the legacy sequence, pinned); tap.verb~'s deviate() moves to the house LCG with a seed attribute (right core offset-seeded to preserve stereo decorrelation).
  • §5tap.delay~/tap.multitap~ rebuilt on the new kernel delay.h: Hermite interpolation (default) with interp 0 as the bit-compat legacy mode, feedback + mix on delay, multitap now stereo out with per-tap pan. Documented breaking change: a connected time signal always wins, including at 0.0 — the old "0.0 means use the attribute" trap is retired.
  • §6 / v1.1tap.vocoder~ gains sibilance/mix/seed/bypass/mute; tap.harmony~ gains store/recall [ms] preset morphing, interp, bypass/mute; tap.vco~ gains vibrato/vibrato_rate/vibrato_delay/bend.
  • §7/§8tap.sustain~'s length setter made truthful; tap.crossfade~ mode deprecated in docs; verb/vocoder/sustain/noise/delay/multitap maxrefs rewritten to the real surfaces.
  • Records: plan sections flipped to shipped with findings; REVIVAL §15.

Why

The recipes-improvements plan, executed: four parallel worktree agents (two kernel, two wrapper), serial integration. Kernel counterparts merged in tap/TapTools#28.

Verification

  • Wrapper test suites for the six touched objects were compiled and run here under GCC against the mock harness and the sibling kernel checkout — all green (noise 483k assertions, verb determinism, ladder/diode enum scenarios, vco defaults/clamps, delay/multitap numeric expectations verified against the real kernel header). CI on this PR is the first real macOS-universal/Windows compile — the standing gate.
  • DSP correctness is pinned kernel-side (merged Revive TapTools: 46 objects on modern Min + C++20, prune the Jamoma corpse #28: 6 delay scenarios incl. bit-compat vs the Jamoma-era truncation; vocoder sibilance/mix; harmonizer morph; vco vibrato).
  • Not done here: help patchers for delay/multitap/vocoder/harmony still show pre-wave surfaces (JSON graphs — flagged for the on-Mac pass), and the delay "time signal always wins" contract needs the runtime harness (mock inlets can't present as connected).

Notes for the reviewer

  • Submodule pin moved (twice, both to main — reachable after branch cleanup by construction).
  • Contract changes, both deliberate and documented: the delay time-signal behavior above, and multitap's second outlet.
  • Still open in the plan: tap.5comb~ MIDI notes message, the tap.verb~ clear/DC-blocker one-liner, help-patcher refreshes, on-Mac validation.

🤖 Generated with Claude Code

https://claude.ai/code/session_01V6CC6kpK5Lx2YkJWuNNQpw

claude added 3 commits August 5, 2026 12:52
tap/TapTools#27 landed on main by rebase; main's head d878622 carries
the identical tree to the branch commit this pin referenced, so the
pin moves there per the release flow and stays reachable after branch
cleanup. No content change.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V6CC6kpK5Lx2YkJWuNNQpw
…xref drift, vco performance attrs

Implements improvements-plan §3, §4, §7, §8 plus the pending tap.vco~
performance attributes:

- §3 tap.ladder~ / tap.diode~: mode/solver become attribute<symbol> with a
  numeric-compatible setter (the tap.svf~ house pattern) — '@mode lp24' and
  '@mode 0' both work, getters report the symbol. min-api's native
  attribute<enum> (enum_map) pattern stores/reports the index and trips the
  tap.crossfade~/tap.pan~ GCC lesson (REVIVAL.md 9.5), so it is deliberately
  not used. Maxrefs updated; wrapper tests extended to pin both spellings.

- §4 determinism: tap.noise~ drops std::random_device for a seed attribute
  (int >= 1, default 1; seed 1 reproduces the legacy TTNoise LCG sequence bit
  for bit, and the gaussian path is seeded too). tap.verb~ replaces
  std::rand() in deviate() with a seeded LCG (state*1664525+1013904223)
  restarted from the new seed attribute on every configure, making the comb
  tuning a pure function of (seed, parameters, sample rate); the right core
  seeds at a golden-ratio offset so stereo decorrelation survives. New
  determinism test scenarios pin same-seed identity, different-seed
  decorrelation, and re-seed reproducibility.

- §7: tap.sustain~ length gets a real setter (stores truthfully; the ring
  re-sizes at the next dspsetup via update_samplerate(), documented in the
  attribute description). tap.crossfade~ mode marked deprecated/no-op in its
  maxref (legacy compatibility only); wrapper code untouched.

- §8 maxref drift: tap.verb~ rewritten to the wrapper's real surface (er, not
  use_early_reflections; all 19 attributes with ranges/defaults);
  tap.vocoder~ q/response_interval documented with the wrapper's numeric
  ranges; tap.sustain~ rewritten to the real surface (length, voices 1-5,
  fade, rise, bang capture, clear, round-robin stealing); tap.noise~ brought
  up to the full surface while adding seed.

- tap.vco~: vibrato (cents 0..100), vibrato_rate (Hz 0.05..20),
  vibrato_delay (ms 0..5000, onset re-armed per note change), and bend
  (semitones -24..24, rides the smooth ramp) forwarded to the kernel's
  set_vibrato/set_vibrato_rate/set_vibrato_delay/set_bend (param indices
  9-12); maxref updated. Requires the kernel pin bump that carries those
  setters.

All six touched wrapper test suites built and passed against the mock kernel
(GCC, C++20, sibling kernel checkout).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V6CC6kpK5Lx2YkJWuNNQpw
The kernel branch head carries the vco performance section (p_vibrato
through p_bend), the vocoder sibilance/mix path, the harmonizer preset
morph, and the new delay pair — everything the wrapper wave in flight
compiles against.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V6CC6kpK5Lx2YkJWuNNQpw
@tap tap changed the title Repoint the taptools pin at main post-merge Pin repoint + the improvements wave: symbolic enums, determinism seeds, QoL, maxref sweep, vco performance attrs Aug 5, 2026
claude added 3 commits August 5, 2026 13:37
…r~/tap.harmony~ surfaces

tap.delay~: rebuilt on tap::tools::delay::line — feedback (0..0.99,
DC-blocked), equal-power mix (default 100 = the old wet-only output),
interp (1 Hermite default / 0 legacy bit-compat truncation), kernel
slews on every parameter. BREAKING by design: a time signal in the
right inlet always wins, including at 0.0 (the old "0.0 means use the
attribute" trap dies); float in the right inlet now works too.

tap.multitap~: rebuilt on tap::tools::delay::multitap — same
buffersize/taps/delay/gain(dB) surface plus per-tap pan (-1..1,
default center) and interp, now summing to a stereo outlet pair
(a center-panned tap feeds both equally; the old mono out is the
mix of the two).

tap.vocoder~: sibilance (0..1), mix (0..100), seed (>=1) forwarded
to the kernel; bypass/mute wrapper-side per the house idiom.

tap.harmony~: store/recall preset messages (slots 1..16, optional
morph time defaulting to the new interp attribute, the tap.vco~
idiom); bypass/mute wrapper-side.

Docs updated for all four surfaces (vocoder: attribute entries
appended only — the q/response_interval fix is in flight elsewhere).
Wrapper tests rewritten for the new kernel-backed semantics; the
signal-wins path needs a real patch cord and is deferred to
runtime-tests (mock presents inlets as unconnected).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V6CC6kpK5Lx2YkJWuNNQpw
The plan's sections flip to shipped with their findings recorded (the
min-api enum-attribute limitation, the noise seed-1 bit-identity, the
verb offset-seeded right core, the delay breaking change), the
discovery log gains the wave's new rows (verb clear misses the
DC-blocker state; help patchers pending; 5comb notes message still
open), and REVIVAL gains entry 15 summarizing the wave.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V6CC6kpK5Lx2YkJWuNNQpw
tap/TapTools#28 landed on main by rebase; main's head d64e8c4 carries
the identical tree to the branch commit this pin referenced (verified
by tree hash), so the pin moves there per the release flow and stays
reachable after branch cleanup. No content change.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V6CC6kpK5Lx2YkJWuNNQpw
@tap tap changed the title Pin repoint + the improvements wave: symbolic enums, determinism seeds, QoL, maxref sweep, vco performance attrs The improvements wave: symbolic enums, determinism, delay rebuild, grown surfaces (+ pin repoints) Aug 5, 2026
@tap
tap merged commit 77f5fb9 into main Aug 5, 2026
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants