Building TagoPitch
TagoPitch is a monophonic vocal pitcher: pitch up to an octave in both directions, independent formant control, a mix knob. Think Little AlterBoy territory. It's the first plugin of my own line, it's a free download, and these are the design notes: the decisions that shaped it, and the ones I'd make again.
Why build it
Pitched vocal chops are half my beats. For years that meant reaching for someone else's plugin, and as someone who builds audio software for a living, that started to feel backwards. So TagoPitch had a clear bar from day one: it has to be good enough that I stop using the plugin it replaces. Not a tech demo, a tool for my own sessions.
Pitch is easy. Formants decide.
Transposing audio is a solved problem. What separates a usable vocal pitcher from a toy is what happens to the formants, the resonances of the vocal tract that make a voice sound like a person. Shift pitch naively and the formants ride along: up turns into chipmunk, down turns into a cartoon villain. Hold the spectral envelope in place while the pitch moves underneath it, and the voice stays a voice.
That's also why formant control is a separate knob and not a checkbox. Decoupled from pitch it becomes a sound design tool of its own: pull the formants down on an unshifted vocal and you get weight and darkness without touching the melody. For v1 the shifting itself runs on signalsmith-stretch, a realtime C++ engine I chose deliberately after testing it against the material I actually produce. The engine behind the knobs is a component. The product decisions around it, what to expose, how it should fail, when it's good enough, were the actual work.
Python first, as always
My rule from client work applies to my own plugins too: no C++ until the prototype is bulletproof. The engine ran in my Python workbench first, on real material. I rendered a listening pack, A/B pairs at identical positions, and judged by ear. Female vocals convinced me across the whole range. A male hook at +12 semitones got weird, which is exactly the kind of finding you want before writing plugin code: it told me the mix knob isn't a nice-to-have, it's the rescue for the hardest case. That insight shipped as a feature.
Mockup to UI, without drift
The UI existed before the plugin did: a static HTML/CSS mockup, tweaked until it looked right, then frozen as the spec. The real interface is a WebView inside JUCE 8, and the build loop was literal screenshot comparison against the mockup until the two matched. Two traps worth passing on: wire the parameter binding between JavaScript and the audio processor before building any visuals, and test typing in text fields early, because the DAW will happily steal your keystrokes while the WebView has focus.
Shipping is half the product
The part most plugin projects never reach: code signing, a .pkg installer with VST3 and AU, Apple notarization and stapling, a Windows VST3 built on CI, license attribution in the bundles. None of it is glamorous, all of it is mandatory, and it's the difference between a demo on my machine and something a stranger can install without a scary dialog. I'd shipped DubCheck through this gauntlet before, which is the only reason it went smoothly this time.
What's next
v2 is where the DSP goes deeper: hard-tune, meaning my own pitch detection and quantization logic, plus a drive stage. And the shifting engine sits behind an interface, so my own PSOLA implementation can replace it without users noticing anything except the changelog. The foundation is built to be swapped upward.
TagoPitch is a free download at tagobeats.com. Load it on a vocal, pull the formant knob down, you'll hear why I wanted it.
Written by Robin Busse. TagoPitch is an independent product of Robin Busse - Audio & Media, not client work.