Skip to content

tap.vca~ — standalone VCA (clean / warm / swing), + swing drive on the 808 noise voices#53

Merged
tap merged 5 commits into
mainfrom
claude/vca-object-808-303-vtyl35
Jul 19, 2026
Merged

tap.vca~ — standalone VCA (clean / warm / swing), + swing drive on the 808 noise voices#53
tap merged 5 commits into
mainfrom
claude/vca-object-808-303-vtyl35

Conversation

@tap

@tap tap commented Jul 19, 2026

Copy link
Copy Markdown
Owner

What this is

Ships tap.vca~, a new MSP external built on the shared vca.h kernel, and exposes the TR-808 swing-VCA drive on the noise-voice wrappers. Pins the kernel from tap/TapTools#17 (the vca.h extraction + swing mode + calibration notebook).

Merge order: depends on tap/TapTools#17. Merge the kernel PR first, then update submodules/taptools to the merged kernel commit on main before merging this. (The pin currently tracks the feature branch tip 8e02ac5.)

New object — tap.vca~

A voltage-controlled amplifier: left inlet audio, right inlet the gain / control voltage (signal for per-sample modulation, or a float). Three circuits:

  • clean (default) — pure linear multiply, bit-identical to *~.
  • warm — the TB-303 one-transistor class-A stage: asymmetric biased-tanh (even harmonics) + compression that ride the CV, with an output DC block. drive/bias exposed (stock 303 2.0/0.3).
  • swing — the TR-808 swing-type VCA: symmetric saturation (odd harmonics, no DC), the same stage the 808 noise voices use.

Full vertical slice: wrapper + CMakeLists.txt + wrapper test (defaults, forwarding, clamping) + docs/tap.vca~.maxref.xml + help/tap.vca~.maxhelp.

808 wrappers

tap.808.snare~/clap~/tom~ gain a drive circuit-bend attribute (0..12, default 0 = the calibrated linear model, bit-identical). Raised, it engages the swing VCA's symmetric harmonic saturation on the noise path. Wrapper tests + maxrefs updated.

Per the calibration notebook in tap/TapTools#17, drive stays a creative bend, not a promoted default — the data shows the linear model already matches the real 808 on these voices. (The tonal rimshot, where swing is a fidelity win, already ships saturated in the kernel; no wrapper change needed.)

Testing

ctest green for the affected wrappers (tap.vca_tilde, tap.808.{snare,clap,tom}_tilde); all objects build against the pinned kernel. macOS-universal / in-Max runtime validation remains the standing local gate (unchanged by this PR).

🤖 Generated with Claude Code

https://claude.ai/code/session_01GQDkcxQY5w8AV5cJdiHMHS


Generated by Claude Code

claude added 5 commits July 18, 2026 22:41
A new MSP external wrapping the extracted taptools::vca kernel (submodule pin
bumped to 253d550). The left inlet is audio; the right inlet is the gain /
control voltage (signal for per-sample modulation, or a float).

- circuit clean (default): pure linear multiply, bit-identical to *~.
- circuit warm: the TB-303 one-transistor class-A stage — the same kernel
  tap.303~ runs — biased-tanh saturation applied after the gain, so the
  even-harmonic warmth and compression track the control voltage, with an
  output DC block (dcblock) that sheds the shaper's signal-dependent offset.
- drive/bias shape the warm circuit (stock at the 303's 2.0 / 0.3).

Full vertical slice: wrapper + CMake + wrapper test (attribute defaults,
forwarding, clamping) + maxref + help patcher. REVIVAL.md §7 and the 303/808
plans note the extraction; when the flagged 808 circuit-sim phase models the
swing VCA's harmonics, that character lands here as a third circuit mode.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GQDkcxQY5w8AV5cJdiHMHS
…tap.vca~

Bumps the kernel pin to 1b3c284 (vca.h mode_swing + swing_vca drive).

- tap.808.snare~/clap~/tom~ gain a `drive` circuit-bend attribute (0..12,
  default 0 = the calibrated linear model, bit-identical). Raised, it engages
  the swing VCA's symmetric harmonic saturation on the noise path — grit and
  compression that ride the envelope. Wrapper tests + maxrefs updated.
- tap.vca~ gains `circuit swing` (the TR-808 swing-type VCA, the same stage),
  alongside clean/warm; `drive` now documented for both warm and swing.

REVIVAL.md §7 and plans/tap.808.md record the swing mode landing; the heavier
WDF @circuit pass stays A/B-gated.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GQDkcxQY5w8AV5cJdiHMHS
Pulls in the bit-identical rimshot unification (its inline swing-VCA tanh is now
the shared vca.h swing_shape) and the calibration notebook / render-tool drive
knobs. No change to the built externals' behavior; keeps the Max package built
against the complete feature kernel.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GQDkcxQY5w8AV5cJdiHMHS
Satisfies the Tap House CI style gate:
- clang-format-18 over the touched source/projects/*.cpp (tap.vca~ + the
  tap.808.{snare,clap,tom}~ drive attributes) — layout only.
- braces around the tap.vca~ circuit setter's if/else-if
  (readability-braces-around-statements).

No behavior change; the affected wrapper tests still pass.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GQDkcxQY5w8AV5cJdiHMHS
tap/TapTools#17 merged (rebase), rewriting the feature commits onto main with
new SHAs — so the previous pin (8e02ac5, a feature-branch commit) is no longer
on kernel main. Re-point submodules/taptools at the merged main tip, which
carries the identical swing-VCA kernel. No change to the built externals.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GQDkcxQY5w8AV5cJdiHMHS
@tap
tap merged commit ed383c5 into main Jul 19, 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