vox · part of LEMON

vox

Voice synthesis and analysis as pipe tools.

The voice family of the smpl toolchain, grown into its own package: measure a voice like an instrument, control a render like a score, and verify that what came out matches what was asked for. vox tools read and write the same frames as smpl, so the two toolchains sit in one pipe.

$ smpl read take.wav | vox ear describe | vox vector measure | smpl view

In plain words: load a recording, measure the voice inside it (ear: pitch, formants, breathiness, vibrato), place it on a six-axis coordinate (vector), and print the report. New to terminal pipes? The smpl site walks through them gently.

Part of the LEMON house · lemon-agent.dev teaches the agent method · lemon.audio is the music side · smpl is the audio toolchain vox grew from

Choose what you want to do

Pick one path. Each card pairs a runnable first command with the installs it needs; you do not need the rest of vox.

Analyze a voice

Measure pitch, formants, noise, vibrato, and the six voice axes.

Install
uv tool install git+https://github.com/chronick/smpl#subdirectory=packages/smpl --with git+https://github.com/chronick/smpl#subdirectory=packages/smplstream --with git+https://github.com/chronick/smpl#subdirectory=packages/smpl-analysis
uv tool install git+https://github.com/chronick/vox#subdirectory=packages/vox
uv tool install git+https://github.com/chronick/vox#subdirectory=tools/vox-ear
uv tool install git+https://github.com/chronick/vox#subdirectory=tools/vox-vector
Run
curl -LO https://chronick.github.io/vox/assets/guide-sung.wav
smpl read guide-sung.wav | vox ear describe | vox vector measure | smpl view

Success includes voice.f0_median_hz near 130.83 Hz and voice.hnr_db near 24.08 dB. Replace the demo file with your own take next.

Make say sing

Turn one spoken line into a score, a sung take, and a measured choir.

Install
uv tool install git+https://github.com/chronick/smpl#subdirectory=packages/smpl --with git+https://github.com/chronick/smpl#subdirectory=packages/smplstream --with git+https://github.com/chronick/smpl#subdirectory=packages/smpl-analysis
uv tool install git+https://github.com/chronick/vox#subdirectory=packages/vox
uv tool install git+https://github.com/chronick/vox#subdirectory=tools/vox-lyric
uv tool install git+https://github.com/chronick/vox#subdirectory=tools/vox-tongue
uv tool install git+https://github.com/chronick/vox#subdirectory=tools/vox-larynx
uv tool install git+https://github.com/chronick/vox#subdirectory=tools/vox-ear
uv tool install git+https://github.com/chronick/vox#subdirectory=tools/vox-vector
Follow the six commands

Open the say-to-singing guide. It starts with one line and ends with a five-voice, measured choir.

Use an RVC cast

Import an authorized model, convert locally, and keep its provenance.

Install
uv tool install git+https://github.com/chronick/smpl#subdirectory=packages/smpl --with git+https://github.com/chronick/smpl#subdirectory=packages/smplstream --with git+https://github.com/chronick/smpl#subdirectory=packages/smpl-analysis
uv tool install git+https://github.com/chronick/vox#subdirectory=packages/vox
uv tool install git+https://github.com/chronick/vox#subdirectory=tools/vox-cast
Prepare
vox cast setup
vox cast import --model ~/Downloads/mycast.pth --name mycast
vox cast list

setup installs the shared inference engine and about 732 MB of base assets—not a person's voice. Bring a model you are authorized to use. Open the cast guide.

Voices built with vox

Three exhibits, each rendered end to end by the commands shown, from synthetic sources only (macOS say voices and SuperCollider synthdefs; no recorded human source anywhere). They are the site's examples and the toolchain's integration proof at once.

The choir

One written line becomes a sung choir with nobody singing: the lyric verifier gates the words, the phoneme score places each syllable on a melody, say speaks the syllables, the WORLD vocoder imposes each note's exact pitch without chipmunking, and the harmonizer stacks the result into a five-voice choir with a drone under it.

Requires: macOS say, plus smpl, the vox dispatcher, lyric, tongue, larynx, ear, and vector. The exact install commands are in the sing card above.

$ say -v Fred --file-format=WAVE --data-format=LEI16@44100 -o spoken.wav "slow river carry me home"
$ vox lyric review --delivery sustained --lines "slow river carry me home" --json
$ vox lyric packet --delivery sustained --lines "slow river carry me home" | vox tongue compile-packet --melody "A2,C3,E3,D3,C3" --bpm 90 --score river.yaml
$ vox tongue sing --score river.yaml --out sung.wav
$ smpl read sung.wav | vox larynx harmonize --chord 0,3,7 --drone | smpl write choir.wav
$ smpl read choir.wav | vox ear describe | vox vector measure | smpl view
DRY
Waveform of the sung line before harmonization

the sung line, one voice, before the stack

CHOIR
Waveform of the harmonized five-voice choir

5 voices · chord 0,3,7 + drone · measured HNR 2.7 dB, f0 median 73.5 Hz

The measured numbers come from running vox ear and vox vector on the finished choir: HNR drops from 24.1 dB to 2.7 dB as five decorrelated voices turn one clean tone into a textured stack. Want to build this yourself, step by step? The say-to-singing guide walks the whole path in six commands.

The deep carrier

Two percussive lines are spat on a tempo grid by say, then poured into a 55 Hz FM growl: a channel vocoder makes the growl speak the words, the bass chain keeps the sub and the consonant band, and a quiet dry-diction layer keeps the words legible inside the bass.

Requires: macOS say, ffmpeg, SuperCollider, the vox dispatcher, and vox-carrier. Install the two vox pieces with uv tool install git+https://github.com/chronick/vox#subdirectory=packages/vox and uv tool install git+https://github.com/chronick/vox#subdirectory=tools/vox-carrier.

$ vox carrier verse --lines "Kick the pattern back to the top|Cut the deck and count to ten" \
    --body growl-55 --bpm 142 --out verse.wav
DRY
Waveform of the dry spat modulator on the grid

the dry spit: pure cadence, thin on purpose

CARRIER
Waveform of the same words voiced by the deep growl body

growl body · bass-safe f0 96.0 Hz (a naive tracker reads 123.8)

The honest part: pitch trackers lie about harsh bass. On this voice the standard tracker reads 123.8 Hz; the bass-safe ruler (a low-floor pass that refuses to trust it under 90 Hz targets) reads 96.0 Hz. That guard is a shipped library function (vox-core), and the toolchain's own tests pin it with a 55 Hz trap case.

The bodies

Five named carrier voices from the registry, each an engine + parameters with a measured fingerprint written back into the palette. All render offline through SuperCollider.

Requires: SuperCollider, the vox dispatcher, and vox-bodies. Install the two vox pieces with uv tool install git+https://github.com/chronick/vox#subdirectory=packages/vox and uv tool install git+https://github.com/chronick/vox#subdirectory=tools/vox-bodies.

$ vox bodies render growl-55 --out growl.wav

Every sound and number in this section regenerates from docs/make_assets.sh, which runs the pipelines shown and saves a numbers.json receipt. The same pipelines are pinned by the repo's test suites (scripts/test-all.sh runs all thirteen).

The tools

Thirteen tools and a shared core, each in its own isolated install, found by name (vox ear runs vox-ear; a missing tool prints its exact install command):

earvoice measurement: F0, formants F1–F4, HNR, jitter, shimmer, vibrato
larynxWORLD vocoder: retune with formants kept, harmonize into a choir
vectora six-axis voice coordinate: measure it, diff it against a target
lyriclyric prosody verifier + CMUdict packet (delivery: sustained | percussive)
tonguea phoneme score: say→WORLD singing, bank concat, DiffSinger export, singing warp
flowcadence grammar: pattern DSL, say-spat render, named fx chains
carrierspat words poured into a deep body: vocode + bass chain + diction layer
bodiesthe carrier-voice registry with measured fingerprints
takecard-driven render-and-self-verify: render, measure, report the error
syllabanka syllable sample bank with a hard provenance contract
corpusvoice-corpus ingest gate: peak-normalize + VAD survivability
datasetthe dataset-health doctor: rubric-scored voicebank fitness
castvoice conversion through a trained RVC model; the ML stack lives in its own engine venv

Under them: vox-core (the bass-safe guarded F0 ruler + the shipped SuperCollider synthdefs). The dependency matrix, Python-pin story, and optional pieces are in INSTALL.md.

In one pipe with smpl

vox tools speak the smpl frame protocol, so measurement, storage, and reporting come from smpl while vox contributes the voice stages:

Requires: smpl, the vox dispatcher, vox-ear, vox-vector, and vox-larynx. Their exact install commands are in Install.

$ smpl read take.wav | vox ear describe | smpl view
$ smpl read take.wav | vox ear describe | vox vector diff --target '{"breathiness":0.2,"roughness":0.1}'
$ smpl read take.wav | vox larynx render --semitones 2 | smpl write up2.wav
$ smpl read take.wav | vox larynx harmonize --chord 0,3,7 --drone | smpl write choir.wav

Every command above runs as shown once both toolchains are installed. The frame protocol contract lives in the smpl repo (spec.md).

Install

Everything installs with uv. The dispatcher is tiny; tools install one by one, so a heavy dependency in one can never break another:

$ uv tool install git+https://github.com/chronick/vox#subdirectory=packages/vox
$ uv tool install git+https://github.com/chronick/smpl#subdirectory=packages/smpl \
    --with git+https://github.com/chronick/smpl#subdirectory=packages/smplstream \
    --with git+https://github.com/chronick/smpl#subdirectory=packages/smpl-analysis
$ uv tool install git+https://github.com/chronick/vox#subdirectory=tools/vox-ear
$ uv tool install git+https://github.com/chronick/vox#subdirectory=tools/vox-vector
$ uv tool install git+https://github.com/chronick/vox#subdirectory=tools/vox-larynx

vox --help lists every tool with its install command. The full dependency matrix (Python pins, optional extras, system binaries, what degrades without them) is in INSTALL.md. MIT licensed.

Agent skills

Two installable skills let Codex or Claude Code drive the measured workflows while the audio and final judgment stay yours:

$ npx skills add chronick/vox --global --agent codex claude-code --yes
vox-analyzerun ear + vector, cite measurements with units, and separate observations from interpretation
vox-castcheck readiness and provenance, import an authorized RVC model, convert, and compare dry against converted

The skills orchestrate local CLI tools; they do not upload audio or provide voice models. Install the CLI pieces for the path you choose above.