The improvements wave: symbolic enums, determinism, delay rebuild, grown surfaces (+ pin repoints) - #62
Merged
Merged
Conversation
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
…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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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):
submodules/taptoolstracked kernelmainacross 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.tap.ladder~/tap.diode~mode/solveraccept both symbols and numbers, getters report symbols (attribute<symbol>+ numeric fallback; min-api's native enum attributes report indices andattribute<enum class>is banned per REVIVAL §9.5 — finding recorded in the plan).tap.noise~gainsseed(seed 1 bit-identical to the legacy sequence, pinned);tap.verb~'sdeviate()moves to the house LCG with aseedattribute (right core offset-seeded to preserve stereo decorrelation).tap.delay~/tap.multitap~rebuilt on the new kerneldelay.h: Hermite interpolation (default) withinterp 0as 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.tap.vocoder~gainssibilance/mix/seed/bypass/mute;tap.harmony~gainsstore/recall [ms]preset morphing,interp,bypass/mute;tap.vco~gainsvibrato/vibrato_rate/vibrato_delay/bend.tap.sustain~'slengthsetter made truthful;tap.crossfade~modedeprecated in docs; verb/vocoder/sustain/noise/delay/multitap maxrefs rewritten to the real surfaces.Why
The recipes-improvements plan, executed: four parallel worktree agents (two kernel, two wrapper), serial integration. Kernel counterparts merged in tap/TapTools#28.
Verification
Notes for the reviewer
main— reachable after branch cleanup by construction).tap.5comb~MIDInotesmessage, thetap.verb~clear/DC-blocker one-liner, help-patcher refreshes, on-Mac validation.🤖 Generated with Claude Code
https://claude.ai/code/session_01V6CC6kpK5Lx2YkJWuNNQpw