capability
verified July 2026
Delivery is a request parameter.
Most engines give you a voice and a volume knob. This one exposes the prosody itself: intensity, melodic range, pacing, speed and gain, each a continuous field on the ordinary request. The figures on this page are what those fields actually did when we measured them.
01
The dial that decides how a line lands
temperature sets prosodic variation — pitch range and melody — from 0.1 to 1.2. It is the control a listener actually perceives as the difference between a line recited and a line performed, and unlike a preset it is continuous.
Measured: one voice, one sentence, three seeds at each setting, rendered on the production API on 2026-07-21. Pitch range read from an autocorrelation pitch track as the p5–p95 spread in semitones. At 0.3 the read holds a 10.08-semitone range; at 0.9 it opens to 17.99 — a 7.91-semitone difference in melodic range from one field, on the same voice saying the same words. The curve is not monotonic: it peaks near 0.9 and comes back to 13.30 at the 1.2 ceiling, which is the kind of thing you only learn by measuring rather than by reading a range in a doc.
temperature pitch range (p5-p95, semitones)
0.1 10.65
0.3 10.08 <- flattest
0.5 10.60
0.7 14.73
0.9 17.99 <- widest
1.2 13.30
# same voice, same sentence, expressiveness 0.9, cfg_weight 0.3
02
The rest of the surface
The dials interact, and the interaction is the part worth knowing. Intensity alone, driven to its maximum against tight guidance, measurably FLATTENS a read: we measured 10.93 semitones of range at maximum intensity against 13.69 on a lower intensity paired with loosened guidance, three seeds each. Raise expressiveness and lower cfg_weight together, or the bigger delivery only gets hurried.
- expressiveness — emotional intensity, 0.25 flat to 2.0 animated. Default 0.5.
- cfg_weight — guidance strength, which also sets pacing: 0.2 slow and spacious to 1.0 tight and brisk.
- speed — 0.6 to 1.5, applied after synthesis, so wording and voice are untouched.
- volume — 0.5 to 2.0, applied after mastering with a soft ceiling, so it never hard-clips.
- seed — an integer that makes a render reproducible: the same seed, text, voice and parameters return the same audio, which is what lets you regression-test a prompt change without the voice moving underneath you.
03
The emotion field, and what it actually is
A body field names an emotional read — calm, apologetic, excited, curious and others — and sets tuned dial values under the hood. Explicit numeric fields always override it.
It is a shortcut over the dials, not a separate capability, and we measured how many distinct reads sit behind the names: sixteen accepted names resolve to eight distinct presets, with several names sharing one (bored, calm and tired return byte-identical audio at a fixed seed, as do angry and surprised). Their measured pitch range spans 9.94 to 13.72 semitones — real separation, but a narrower span than the dials reach on their own. We publish that because it is what the measurement says: reach for the presets when you want a sensible read in one field, and for the dials when you want a specific one.
neutral = sending no emotion field at all
calm = bored = tired
angry = surprised
confident = curious = happy
frustrated = scared
apologetic = content
anxious · excited · sad (distinct)
# fixed seed, one voice, one sentence; grouped by identical
# output. 49 takes, measurements.csv published alongside.
04
And the detail you place by hand
These ride inline on every surface — bytes, SSE and WebSocket alike — and none of them costs a round trip or a preprocessing step. They are read at synthesis time, and first audio holds its published 107 ms p50 with every field on this page set.
- <spell>TKT4829XB</spell> — reads character by character, with letter and digit groups paced naturally. For confirmation codes, order IDs and serials.
- <break time="800ms"/> — a real pause, rendered as a natural beat, exactly where the read needs air. The tag is never spoken.
- pronunciation_dict — per-request sounds-like replacements for proper nouns and domain terms, so a brand name is right on the first call, not after a support ticket.
05
Notes — an engineer's checklist
01How much can the delivery actually change?
Measured on one voice and one sentence, three seeds per setting: the prosody dial moves pitch range from 10.08 semitones at its flattest to 17.99 at its widest, a 7.91-semitone spread. That is the melodic difference between a recited line and a performed one, from a single request field. The full table and the audio are published on this page.
02Is expression a separate model or a slower path?
Neither. Every control here is a field on the ordinary synthesis request, conditioning the same voice on the same endpoint. There is no expressive tier and no second model to route to — first audio holds its published 107 ms p50 with the fields set.
03How many distinct emotional presets are there?
Sixteen names are accepted and they resolve to eight distinct presets — several names share one, which we verified by rendering all sixteen at a fixed seed and grouping byte-identical output. The presets are a convenience over the numeric dials; the dials themselves are continuous and reach a wider range.
04Can I reproduce an exact take?
Yes. Send a seed: the same seed, text, voice and parameters return the same audio, per serving region. Omit it for a fresh natural take on every call. That is what lets you diff a prompt change without the voice moving underneath you.
05Do these controls work on a cloned voice?
Yes, on ready-made and cloned voices alike, and across all 23 languages. The reference clip supplies the identity; these fields direct the performance of it.
06What sample rate does the audio come back at?
24 kHz mono PCM by default. Set output_sample_rate if your stack wants something else — 8 kHz for a telephony trunk, for instance — so no transcode sits in the hot path. The default is the full-rate audio, not the telephony rate.
See also — related sheets
capability
1
Spex-TTS — the engine
The engine behind every Gandr surface: built inside a production live-translation product, named for a grain of sand, steered by per-request controls.
capability
0
Voice cloning from ten seconds, in the request
Zero-shot voice cloning: a ten-second reference rides inside each request, no training job, and the identity holds across 23 languages.
capability
3
A text-to-speech API built for live audio
REST, SSE, and WebSocket TTS from one endpoint: 107 ms measured first audio, instant cloning from ten seconds, and a flat per-seat price with usage unmetered.
benchmark
5 rules
How we measure TTS latency
The methodology behind every figure on this site: server-time TTFA on the production API under call-shaped load, percentile pairs, published conditions.
A key, one seat, your own script — nothing on it counted while you build.
Request access — run your own script