Add the overdrive kernel — LGW-voiced feedback soft clipper#22
Merged
Conversation
The spiritual successor to Jamoma's TTOverdrive, per the overdrive handoff brief: not a port of the old memoryless odd-function curves, but a voiced feedback clipper chasing the class of TS-lineage pedals (Mad Professor Little Green Wonder as the listening reference). - Nonlinearity inside a lowpass feedback loop, solved zero-delay with the house fast one-pass scheme (svf/ladder pattern): LF loop gain pinned so bass stays tight while mids take the full drive — the frequency-dependent clipping a static shaper cannot do. - shape() = u/sqrt(1+u^2) (smooth, rsqrt-vectorizable, LUT-able for a future fixed-point port); asymmetry bias for even harmonics; unity clean-through so the transfer never flattens; always-on DC blocker (Jamoma R = 0.9997) since asymmetry generates DC. - body voicing control: pre-clipper HP corner slide + CW upper-mid push + CCW treble lift, all linear EQ; voicing constants are by-ear placeholders pending the in-Max pass. - 1/2/4/8x oversampling (default 4x), normalized 0..1 parameters (Q-format friendly), ramped click-free setters, multichannel frame protocol. - Catch2 tests pin the design goals: gain-tilt-vs-drive, even-harmonic emergence, DC blocking, never-flat slope, alias-floor improvement, body tilt, decay to silence, determinism, clamping. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S3twSGfwUK8jnUhp5Qx6wx
Completes the house treatment for the new overdrive kernel: - tools/capi: taptools_od_* functions (create/prepare/set/oversample/ smooth/clear/process) over tap::tools::od::overdrive, mirroring the other parameter-indexed kernels; taptools_py.py gains the Overdrive ctypes class. - notebooks/overdrive.ipynb (executed): drives the shipping kernel via the C ABI and measures the design goals — the feedback loop's gain tilt growing with drive (+5/+16.3/+17.2 dB at drive 0/0.5/0.9 between 80 Hz and 4 kHz), the never-flat transfer, even harmonics vs asymmetry (H2 -151 dB at 0, -26 dB at 0.6), the alias floor at 1x vs the default 4x (folded H7 -22 -> -36 dB), the body voicing shape, and DC blocking (means ~1e-10 at full drive/asymmetry). - book: 'Distortion with a memory' (new Part VI — The pedalboard) and the machine deep-dive 'The clipper in the loop: overdrive.h' (the zero-delay solve derivation, why the unit-delay loop limit-cycles, the shaper choice, oversampling-vs-ADAA rationale, and the honestly- labeled voicing placeholders); machine part renumbered to VII; introduction and README updated. Every number in the chapters is an executed notebook cell or a kernel suite assertion. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S3twSGfwUK8jnUhp5Qx6wx
tap
pushed a commit
to tap/TapTools-Max
that referenced
this pull request
Jul 23, 2026
The kernel PR (tap/TapTools#22) merged via rebase — main's tree is identical to the branch tip this PR previously pinned. Repointing keeps the pin reachable after kernel branch cleanup, per the kernel repo's release flow. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S3twSGfwUK8jnUhp5Qx6wx
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.
Summary
The spiritual successor to Jamoma's
TTOverdrive— not a port. Both legacy modes were memoryless odd-function waveshapers applied to the full spectrum; this is a voiced feedback soft clipper chasing the class of TS-lineage pedals (Mad Professor Little Green Wonder as the listening reference), per the overdrive handoff brief.include/taptools/overdrive.h(tap::tools::od):svf.hdriven-circuit /ladder.hsolver_fastone-pass scheme). The naive one-sample-delay loop limit-cycles at high drive (|J| > 1 above drive ≈ 0.9); the implicit solve is stable at any loop gain.g_fb = G/k_lf_gain − 1) so bass stays tight and near-clean at any drive while mids take the full gain — the frequency-dependent clipping a static curve cannot produce.shape(u) = u/√(1+u²): C∞ (no curvature seam to alias), monotonic, rsqrt-vectorizable, LUT-able for a future fixed-point port.asymmetrybias for even harmonics; unity clean-through so the transfer never flattens; always-on DC blocker (R = 0.9997, the TTDCBlock constant — load-bearing this time);bodyvoicing (pre-clipper HP corner slide + CW upper-mid push + CCW treble lift, all linear EQ); 1/2/4/8× oversampling (default 4×); normalized 0..1 parameters (Q15/Q31-friendly for embedded targets); ramped click-free setters; multichannel frame protocol.k_voice_*constants are by-ear placeholders pending the in-Max voicing pass against LGW demos — labeled as such in the header, the notebook, and the book.Verification layer (per house rules):
tests/overdrive_test.cpp— 11 Catch2 cases pinning the design goals: gain-tilt-grows-with-drive, even-harmonic emergence/absence, DC blocking, never-flat slope, alias-floor improvement, body tilt, decay to silence, determinism, clamping.tools/capi+taptools_py.py—taptools_od_*C ABI and theOverdrivectypes class.notebooks/overdrive.ipynb— committed executed: tilt +5/+16.3/+17.2 dB (drive 0/0.5/0.9, 80 Hz→4 kHz); H2 −151 dB → −26 dB across asymmetry; folded H7 −22 → −36 dB at 4×; DC means ~1e-10.Rebased on latest
main(integrates cleanly beside thetune.hwork: shared SUMMARY/capi/ctypes merge points resolved keep-both;submodules/dsptappin untouched vs main).Testing
ctest(including the new overdrive cases: 652k assertions).The consuming TapTools-Max PR bumps the submodule pin to this branch's head.
🤖 Generated with Claude Code
https://claude.ai/code/session_01S3twSGfwUK8jnUhp5Qx6wx
Generated by Claude Code