snails.fm/ docs voice tuner

Listening

Control path: once per 64-sample chunk, on the mono sum——— audio   – – – controlx(n)per channelmono sumshift ratios: per chunk, per voiceequal-power pan → stereo busy(n)MCSMono control sumPDPitch detectionpYIN / YINRGTReliability gatesonset · floor · corridorSMFf₀ smoothingTSLTarget selectionScale / MIDIGLDRetune glideMIDISHFLead pitch shifterTD-PSOLA / phase vocoderHarmony voices ×15HVHVHVADT doubles ×4DVDVLatency alignmentALNDry / wet mixMIXz−LDelay-matched dry pathdry (bypass rides this path)

Everything the tuner does is bounded by how well it hears. The defects people associate with pitch correction (warble, notes that won't lock, artefacts between phrases) trace back to detection and the decisions made on it far more often than to the shifting itself. So the machine starts here, and much of its care is spent here.

One listener, not two

Stereo input is averaged to a mono analysis copy, and a single pitch tracker listens to that. The tracker itself reports pitch, confidence, and voicing; every decision built on those (trust, targets, ratios) is then made once, and drives both channels.

The alternative sounds worse than it reads: two independent trackers can briefly disagree, one channel reading the octave while the other reads the note, and for that moment the left and right of your voice are corrected differently, which you hear as smear. One listener means one opinion. It also halves the detection work, and it guarantees that a dual-mono input produces a bit-identical dual-mono output.

Your actual audio is not summed: the mono copy exists only for analysis. Each channel is held untouched for the shifter.

Finding the pitch

The detector estimates your fundamental (how fast the vocal folds are repeating) over a fixed 70–1000 Hz range, delivering a fresh estimate every few milliseconds, each with a confidence score and a voiced-or-not flag.

There are two detectors, and the Tracker switch picks between them:

  • pYIN (the default) keeps several candidate pitches alive at once and tracks the most probable path through them over time. On breathy or quiet singing, where a single guess is most likely to be wrong, it holds steadier and resists octave mistakes.
  • YIN is the classic form: one estimate per frame, no path-tracking. Simpler, and a genuinely different behaviour worth having on the switch.

Whichever you select, the other keeps listening. A tracker switched in cold would need to refill its analysis from silence; kept warm, switching locks back on within about 7 ms. The Tracker switch is an A/B, not a commitment.

Hearing more than it promises

One distinction matters enough to state early: the detector's 70–1000 Hz hearing is independent of the Range control. Range sets the lowest pitch the shifter commits to handle: below that floor, your voice is handed through dry rather than mis-shifted (the deciding page covers how). But the detector still hears it. The tuner always knows your true pitch, including when it declines to move it.

What leaves this page

A stream of pitch estimates (value, confidence, voiced flag) every few milliseconds. Whether any given estimate deserves to be acted on is the next page's problem: deciding.

last updated · Charlie