blog/developers·Aug 5, 2026·4 min·by the eroq team
Giving AI characters a voice — TTS latency, cost and craft
Where voice fits in a character product, how to keep synthesis costs sane, and the delivery details that make a generated line feel performed instead of read.
Text gives a character a mind; voice gives them a body. The retention delta is real — a character who speaks gets opened again. But voice is also the easiest feature to build badly: expensive, slow, and flat. This is the playbook we use.
Voice as a moment, not a modality
The instinct is to voice everything. Resist it. Synthesis costs real money per character of input (3 credits per 100 characters on Voice One, 2 on the faster Voice Turbo), and a wall of autoplayed audio is fatiguing anyway.
Voice works as punctuation: the greeting when a conversation opens, an emotional beat, a reply the user explicitly asks to hear. Products that treat voice as a premium moment spend a tenth as much and get more retention from it, because scarcity is what makes it land.
The cost model
POST /v1/audio/speech meters per started 100-character block. Practical numbers:
| Line | Characters | Credits | ~Cost |
|---|---|---|---|
| Short greeting | 80 | 3 | $0.03 |
| Typical reply | 240 | 9 | $0.09 |
| Long dramatic beat | 600 | 18 | $0.18 |
Two implications. First, write for voice: a spoken line should be shorter than a written one anyway — trimming to 200 characters is a craft improvement that halves your bill. Second, cache aggressively: greetings, catchphrases and recurring beats are the same audio every time. Hash voice + text, store the MP3 yourself — every line also lands in your Library, but a cache you own is what makes a replay cost nothing — and a huge share of playbacks become free.
Latency and the perception of it
Synthesis takes a second or two. The trick is that perceived latency is a UI property:
- Show the text reply immediately; let the audio arrive behind it with a subtle "voice loading" affordance. Users read while it renders.
- For scripted moments (onboarding, greetings), pre-generate — those lines are known before the user ever arrives.
- Never block the conversation on audio. Voice that fails should degrade to text silently, not error the turn.
Making it feel performed
The difference between "read aloud" and "performed" is mostly in the input text:
- Punctuation is prosody. Commas, dashes and ellipses are how you direct pacing. "Well… that's new." performs; "Well that is new" reads.
- Keep character voice in the words. The synthesis voice carries timbre; the writing carries personality. A sardonic character needs sardonic sentences, not a sardonic voice setting.
- Match voice to character once, then never change it. Voice identity is character identity — switching voices mid-relationship is the audio equivalent of swapping the avatar.
The roster (24 voices, from aria, warm and intimate, to orion, low and unhurried — the full list is in the reference) is curated rather than infinite on purpose: two dozen voices that always sound right beat four hundred that sometimes do, and every one reads 13 languages. When neither fits the character, clone a voice from your own audio and cast that instead.
The round trip: ears too
The same audio pipeline runs the other way — /v1/audio/transcriptions (1 credit per minute of audio) turns a user's voice message into text your character can answer. Voice in, text reasoning, voice out is the full loop of a "call mode", and each leg is one API call.
FAQ
How much does AI text-to-speech cost per line?
Voice One meters 3 credits per started 100 characters, Voice Turbo 2 for the same roster and the same clones. A 240-character reply is 9 credits on Voice One, around nine cents. Writing shorter lines is both a craft improvement and the cheapest way to halve the bill.
Can I clone a character's voice?
Yes — upload your own audio in the Voice studio and the clone joins your roster, castable from the API like aria or orion. A character can be assigned a cloned or roster voice once, which is how you keep voice identity stable across a relationship.
Which languages do the voices speak?
Both speech models read 13 languages, and a cloned voice carries across them too. Language comes from the text you send rather than a separate parameter, so a character can answer in the user's language with the same timbre.
Can eroq lip-sync a voice to a video or an avatar?
No. There is no lip-sync, no talking-avatar feature and no real-time voice — synthesis returns an MP3 you play back yourself. Design the moment as a voice note attached to a still image, which is what works in production anyway, and export to a video editor if you need the two on one timeline.
Start with greetings: one cached line per character, a few credits each, shipped in an afternoon. Measure what it does to day-two retention, then decide how much further to take it. In our experience, that first afternoon is the one that changes the product.
Make it in eroq
Build it on the API
An API key takes a minute. The same engines, the same prices, async jobs and webhooks.
50 free credits · no card · private mode on every account