W/03Writing

Building TagoClip

·~4 min read
waveshapingoversamplingreverse engineeringshipped
TagoClip v1, display-only. The curve visualization is the centerpiece: the trace is the transfer curve you'll read about below, and the dots ride on the live signal.

TagoClip is a soft clipper for 808s and drums: the exact curve of FL Studio's Fruity Soft Clipper, measured down to float noise, as a VST3/AU plugin for every DAW, with the oversampling the original never had. You can download the Plugin for free at my site tagobeats.com.

Why build it

If you produce hip-hop or trap, you know the Fruity Soft Clipper. It's one of the GOAT plugins of that scene: a stock FL Studio clipper that delivers the dirty, hard-hitting 808 sound half the genre is built on. Producers use it because slamming an 808 into that curve creates that extra punch. I personally know some producers that send out their beats with only the Fruity Soft Cliper on the master channel. Crazy right? There's just one problem: it only exists inside FL Studio. Switch DAWs, or work with someone who did, and the sound stays behind. That's the whole pitch for TagoClip: that sound, everywhere, minus the one flaw the original ships with.

Cracking the curve

I didn't want "inspired by". I wanted the actual transfer curve, so I measured it: rendered test signals through the real plugin in FL, compared input to output, and fitted the shape. The result is a static waveshaper that is identity below a threshold and an exponential saturation above it. Fitting that model against a full test bounce leaves a maximum error of 4.7e-8, which is float32 rounding noise. In other words: within the precision of the audio format, the model is the plugin.

outinknee = threshold (100/128 default)measured fruity curvehard clipidentity
fig. 01The measured curve: identity below the knee, exponential saturation above it. The threshold knob just slides the knee, the ceiling is fixed at 0 dBFS.

The measurement also exposed the plugin's internals. The threshold knob is quantized to 128 internal steps and only moves the knee, the ceiling stays pinned at 0 dBFS. The post gain is a plain linear gain behind the curve, on a nonlinear knob scale where the 80% default is exactly unity. All of that carried straight into TagoClip's parameter design: threshold in the same 128 steps, output in honest dB with 0 dB matching the Fruity default.

The aliasing find

Measuring a plugin tells you about its flaws too. The original runs the waveshaper at the session sample rate with no oversampling, and clipping generates harmonics far past Nyquist. On a plain test tone the ninth harmonic folds back into the audible band at -32 dB, as an inharmonic alias that was never part of the signal. That finding is TagoClip's USP: polyphase oversampling at 4x or 8x kills the fold-back. And because some producers want the artifact, oversampling Off is a real mode and the default: bit-honest Fruity behavior, aliasing included.

dBfh1h3h5h7nyquisth9alias at −32 dB,inharmonicoversampling moves nyquist far right, aliases get filtered before they fold
fig. 02Clipping creates harmonics past Nyquist. Without oversampling the ninth harmonic folds back at −32 dB as an inharmonic alias. Oversampling processes at a higher rate and filters the harmonics before they can fold.

Python first, as always

Same rule as every project: no C++ until the prototype is bulletproof. The clipper ran in my Python DSP library first, curves plus polyphase oversampling, with a test suite pinned to golden values from the FL measurement. Then the proof that matters: rendering real material through my clone and through the actual plugin in FL, and comparing. Maximum delta 3e-8. I put both versions in a blind listening pack and couldn't tell them apart, which is the only pass criterion that counts for a clone.

A fun catch from the harness itself: one test wrote WAVs without an explicit float subtype, the library silently fell back to 16-bit PCM, and the reference signal clipped at ±1.0. If your deltas look wrong, check your test rig before your DSP.

Port with proof

The C++/JUCE port had to prove it matched the prototype, not just compile. Golden tests render the same configs through the Python reference and the C++ engine: maximum delta 1.9e-7 across all of them, and a block-size sweep that is bit-identical, so the engine doesn't care how the host chops its buffers. One deliberate design call: latency is a constant 20 samples in every oversampling mode, including Off. Toggling oversampling never makes the DAW's delay compensation jump, which matters when you A/B the modes mid-session.

Two features made it in beyond the clone. Delta listening plays literally what the clipper removes, no smoothing, so you hear exactly what you're trading for loudness. And a mono low-end section sums everything below a chosen frequency to mono, a Linkwitz-Riley crossover doing the 808 utility work so you don't need a second plugin on the bus.

The product

From there it took the same road as TagoPitch: WebView UI in JUCE 8 built from a frozen HTML mockup, with a live curve visualization as the centerpiece, signed and notarized for macOS plus a Windows build from CI. TagoClip is a free download at tagobeats.com. Put it on an 808, drive it into the knee, then hit the delta button to hear what the curve is doing.

Written by Robin Busse. TagoClip is an independent product of Robin Busse - Audio & Media, not client work. FL Studio and Fruity Soft Clipper are trademarks of Image-Line; TagoClip is not affiliated with or endorsed by Image-Line.