audiodsppluginsmusic-productionengineeringside-projects

Where 15 Years of Bass Meets 15 Years of Code

by James H. Gordy

Where 15 Years of Bass Meets 15 Years of Code

I record bass as Box of Rules, and I build software as Deviant Ops. For most of fifteen years those have been two separate lives with separate wardrobes. Last week they finally collided, and the wreckage is a free plugin: Bass Better-er, which takes a single bass DI and rebuilds it into a full studio stack. This post is the engineering story behind it, including the part where I pointed pink noise at a vintage Neve console and made a spreadsheet about it.

The paywall in the low end

The problem, as a player, is one I've been grinding against for years. Getting a bass to sit big and aggressive on a record usually means a wall of gear: parallel amp chains, multiple cabs, a pile of microphones, outboard compression, and an engineer balancing all of it live. The tones you hear from players like Justin Chancellor or Chris Wolstenholme aren't one signal. They're a stack of signals, each doing one job, blended until they read as one enormous instrument. Studio-quality low end has always sat behind a paywall of expensive kit.

Split illustration contrasting a towering wall of expensive studio outboard gear in shadow with a single laptop running one glowing plugin window next to a bass guitar

So I did the thing software people do when a physical process is expensive: I captured it once, properly, and turned it into code.

Capture once, replay forever

Earlier this month I spent a studio block at Small Pond recording bass through the full works: a multi-amp, multi-cab, multi-mic chain, tracked through their Neve 8108 console. The session was for a record, but the plan was always double-duty. Every signal was captured cleanly enough to model afterwards, and once you have the chain captured, you can replay it forever.

Illustration of a bassist seated at a large vintage analogue mixing console, with layered translucent sound waves rising from the desk and braiding into a single beam, representing parallel bass layers being captured and recombined

Bass Better-er is that chain, bottled. Drop it on a DI and it splits the signal into parallel frequency-role layers: a clean sub foundation that stays dead centre, a clean body layer for warmth, a driven dirt layer with switchable fuzz, and room ambience around the whole thing. It then glues them back into one apparent instrument. The lows stay mono and centred; the stereo image widens as it climbs. It holds together on a phone speaker and opens up on a big system.

Bass Better-er running live on a bass loop in a Logic Pro session, showing nine channel strips with active metering, fuzz engaged on the dirt layers, a real-time spectrum display, and input, glue and output master knobs

Each layer is voiced from a measured impulse response of the real signal chain, convolved live, with its own channel strip: gain, mute, solo, pan, phase, and a sidechain duck keyed off the dirt layer. When the fuzz hits, anything you arm (even the sub) politely steps aside and lets the grit cut through.

Here it is doing exactly that to a raw DI loop. Turn the sound on: the before and after is the whole argument.

First, interrogate the desk

The software brain earned its keep before a single note was tracked.

A 1980s Neve 8108 is a glorious thing, but it's also a forty-odd-year-old analogue device with twenty-four channels that have each lived their own life. Channels drift. Components age. If you're about to commit a multi-mic session to it (including hard-panned stereo pairs, where channel matching actually matters), "plug in anywhere and hope" is not a strategy.

So before tracking, I characterised the desk. The method is the audio equivalent of a health check you'd run on a server fleet:

  • Pink noise, routed through one channel at a time at unity: EQ flat, filters off, identical gain staging on every channel.
  • ~60 seconds captured per channel, ends trimmed.
  • Every capture run through my signal-chain-analyser and compared on level-independent metrics only: band-energy ratios, spectral centroid, crest factor, spectral flatness, harmonic ratio, inharmonicity. Absolute level tells you about gain staging; these tell you about character.

Findings: channels 1 to 20 captured cleanly, channels 21 to 24 returned no signal at all (tested, documented, and excluded from the session). The twenty live channels clustered tightly (the desk is in genuinely good nick) with one clear outlier. Channel 4 was the brightest on the desk, with the highest spectral flatness and the lowest crest factor: the fingerprint of a channel that's gently saturating and compressing transients all by itself.

Spectrum overlay comparing the reference Neve channel against channel 4, the outlier, which shows reduced low end and a brighter high-frequency tilt characteristic of saturation

On a server fleet you'd cordon that node off. On a recording desk you do the opposite. The deliberately driven dirt layers were assigned to the most saturated channels on purpose: free analogue attitude, exactly where it was wanted. The DI went to the cleanest, most neutral channel on the desk, where any colouration would be most audible. The stereo pairs went to the channels the maths said were near-identical twins; the tightest pair on the desk differed by a distance score of just 0.64.

Bar chart comparing normalised energy across seven frequency bands for the two best-matched Neve channels, with values identical to three decimal places in every band

A mismatched hard-panned pair is the kind of defect that hides until mixdown, when it's expensive to fix. Twenty minutes of pink noise and some feature extraction turned every channel assignment from a guess into a measured decision. The writeup went to the studio as documentation for their own desk.

Deconvolve, distort, reconvolve

Turning the captures into a plugin was its own education, paid for in iterations. The lessons that survived:

  • Distortion goes before the cab. Deconvolve the measured cab response out of the signal, apply the drive, then re-apply the real cab impulse response. The cab is what turns harsh harmonics into musical complexity; clip after it and you just get fizz.
  • Real fuzz is inter-harmonic grit and low-mid body. That is what actually reads as aggression, and the obvious summary statistics (crest factor, spectral centroid) are useless for calibrating it.
  • Oversample every clipper. 4×, or you bake aliased digital hash into the top end and wonder why it sounds like a dying modem.
  • Fit each microphone chain to its own recordings. Copying one chain's drive settings to another simply doesn't transfer; every capture got fitted against the real recording of itself.
  • The meter gets you to 90%. The ear closes the last 10%. I verified the final voicings by measurement and by ear, and the ear overruled the numbers more than once.

The result I could actually verify: running a DI through the plugin's combined impulse responses and comparing against the offline reference engine gives a spectral correlation of 0.9995 to 0.9998. The real-time plugin is, measurably, the studio chain.

The plugin itself is C++20 on JUCE 8: AU, VST3, and standalone, with a lock-free audio thread, convolution and fuzz stages per layer, and a glue compressor on the sum. The proprietary impulse responses ship only inside the compiled binaries and live encrypted in the repo, because the captures are the product of all that studio time.

Free, beta, and listening

Bass Better-er is in open beta and free to download for macOS, Windows, and Linux from the releases page. If it makes your bass sound better, there's a tip jar that funds development and the tools coming after it. The launch threads on TalkBass and Reddit are live, the first bug reports rolled in within hours, and the first fixes shipped the same day.

Bridging the two disciplines has been the most satisfying project I've shipped in a while. The same week of studio time produced a record, a dataset, a measurement report the studio kept, and a public plugin. There are more tools coming from the same captures.

Frequently asked questions

What is Bass Better-er and is it really free?

Bass Better-er is a free bass plugin (AU, VST3, and standalone for macOS, Windows, and Linux) that takes a single bass DI and rebuilds it into parallel studio layers (sub, clean body, switchable fuzz dirt, and room), then glues them back into one instrument. It's in open beta with an optional tip jar. It was built by James, who records as Box of Rules.

How do you profile an analogue mixing console?

Run a known reference signal, such as pink noise, through one channel at a time with identical settings: EQ flat, filters off, the same gain staging. Capture each channel, then compare level-independent metrics such as band-energy ratios, spectral centroid, crest factor, and spectral flatness. That isolates each channel's EQ character and saturation regardless of level. Deviant Ops builds measurement and analysis pipelines like this for clients.

Can Deviant Ops build custom audio software or DSP tools?

Yes. Bass Better-er is a working example: signal measurement and analysis tooling, offline DSP modelling, and a real-time C++/JUCE plugin shipped across three platforms with CI-built releases. If you have a bespoke audio tool or pipeline in mind, get in touch.

Why does a bass DI sound thin compared to records?

Because a finished bass record is rarely one signal. It's typically several parallel layers (a clean sub foundation, a mid-focused body, a driven or fuzzed layer for aggression, and room ambience) balanced together. A raw DI is only one of those ingredients. Parallel layering, by hand in a DAW or with a tool like Bass Better-er, closes that gap.

← back to blog