Back to the blog
Try siriusly.ai

Making an AI voice sound like a person

Synthetic voices stopped sounding robotic years ago. They still sound synthetic, and almost always for the same handful of reasons - none of which are the timbre. Here is what actually gives them away, and how to fix each one.

Play someone a modern text-to-speech sample of a plain English sentence and most listeners cannot reliably tell it from a recording. Play them the same voice reading a product script and they will identify it as synthetic within about four seconds. The difference is not the voice model. It is that a product script contains the things synthetic speech is worst at: a price, a dosage, a brand name, an acronym, a percentage, and a comma the model treats as a full stop.

Every one of those is a solvable problem, and none of them are solved by switching to a better voice. This is a guide to the actual failure modes, sorted by how often they ruin a take.

Hear it before you render it

siriusly.ai previews the voice on your real script - numbers, brand names and all - before a single second of video is generated.

Try it free

Two Architectures, Two Sets of Levers

Before the fixes, it matters which of the two setups you are in, because the same problem is solved differently in each.

Self-voiced video modelSeparate TTS plus lip-sync
How speech is producedThe video model generates voice and picture together from one promptA TTS model renders audio, a video model or lip-sync pass matches the mouth
ExamplesGemini Omni, SeedanceElevenLabs plus a video model or a lip-sync step
How you control pronunciationInstructions in the prompt, in natural languageRewrite the input text phonetically
Voice consistency across shotsHas to be re-established every generationFixed by the voice id
Biggest weaknessDrift in delivery between chunksMouth and audio agreeing only approximately

The practical consequence is a rule worth remembering: with a self-voiced model you tell it how to say the word; with separate TTS you spell the word differently. Doing it the other way around fails in both directions. Feeding a phonetic respelling to a self-voiced model puts a misspelling on screen in any burned-in caption and confuses the model about the actual name. Telling a TTS engine in prose how to pronounce something does nothing at all, because it will read the instruction out loud.

Self-voiced models take an instruction. Text-to-speech takes a respelling. Mixing them up is the single most common cause of a wrong name in a finished ad.

The Six Things That Give a Voice Away

1. Numbers against units

"24g of protein" is read by an unguided model as "twenty four gee", which no human has ever said. Same for 500mg, 10ml, 2kg. The unit abbreviation has to be expanded to the full word, and it has to agree with the number: 1g is "one gram", 5.5g is "five point five grams". This is worth handling globally rather than per script, because it appears in almost every product line ever written.

2. Decimals, prices and percentages

These are the most language-dependent thing in the entire script. English says "zero point zero percent". German says "null Komma null Prozent" and writes the separator as a comma in the first place. A model reading a localized script with an English number habit produces a sentence that is grammatically right and immediately foreign. Any localized script needs its numbers read the way a native speaker actually says them out loud, which is a separate requirement from translating the words - one of several reasons dubbing a translated script tends to fail.

3. Acronyms and initialisms

There are two classes and they need opposite treatment. Unpronounceable initialisms get spelled out letter by letter: CIA as "C-I-A", AI as "A-I". Pronounceable acronyms get read as words: NASA is "NASA", not "N-A-S-A". No model reliably tells them apart on its own, and the failure is very audible in both directions.

4. Smashed-together brand names

Names written as joined capitalized words - ThesisAI, CapCut, SoundCloud - are read by many models as a single unpronounceable blob. The fix is to tell the model to read them as the separate words its own capitalization implies: "Thesis AI", "Cap Cut". This is one of the more reliable one-line fixes available.

5. The opposite failure: a real name run together

This one is less obvious and cost us a real render before we understood it. A perfectly ordinary two-word product name, written out correctly with a space and needing no respelling at all, can still be collapsed into a single mumbled syllable - two words compressed into under a third of a second in the middle of a thirteen-second read. The model has no way of knowing that span is a proper noun rather than a throwaway connective, so it paces over it like one.

The fix is not phonetic. It is to tell the model that the name is a name: say it in full, every word, exactly as written, never contracted or shortened. Worth noting that this instruction directly contradicts a phonetic respelling instruction, so a name should get one or the other and never both.

6. Punctuation used as timing

Synthetic speech reads punctuation far more literally than people do. A comma becomes a real pause, an ellipsis becomes a long one, and a sentence written with three subordinate clauses becomes three stop-start fragments. Conversely, a script written as one long unpunctuated sentence gets read at a flat, unbroken pace that sounds exactly like a machine reading.

Reads badly: "So, I tried it - for about, I would say, two weeks now - and honestly? The difference is... noticeable."

Reads well: "So I tried it for about two weeks. Honestly, the difference is noticeable."

Punctuation is the pacing track. Write it for the ear, not for the page.

A Pre-Render Checklist

Run every script through this before generating anything. It takes under a minute and catches most of what would otherwise show up in a finished render:

  1. Read it out loud yourself. Any sentence you stumble on, the model will too. This alone catches most pacing problems.
  2. Scan for numerals. Every digit, price, percentage and unit gets checked against how it should be spoken in the target language.
  3. Scan for capitals. Acronyms, initialisms and brand names each need a decision: spelled out, read as a word, or said in full.
  4. Check sentence length. Anything over about twenty words gets split. Long sentences are where flat delivery lives.
  5. Check the last line. Models are prone to trailing off, padding, or re-saying the ending in their own words. If the last sentence carries the call to action, that matters.
  6. Listen to a preview, not a sample. A voice demo reading generic text tells you nothing about how it handles your script. Preview the actual line.

Choosing a Voice

Timbre matters less than people expect, and two other properties matter more:

  • Native fluency in the target language. A voice speaking a language it was not primarily trained on carries an accent that native listeners hear instantly, even when every word is correct. This is the single most common reason a localized ad underperforms in-market.
  • Range that matches the register. A voice optimized for calm narration will read an excited hook as a calm person pretending to be excited, which is worse than either. Match the voice to the emotional range the script actually demands.
  • Consistency across takes. If a reel is assembled from several generations, the voice has to be the same voice at second two and second twenty-eight. With a fixed voice id this is free; with a self-voiced model it has to be re-established in every prompt, which is the same continuity problem last-frame chaining solves for the picture.
A note on voice cloning

Cloning a voice from an existing take is the most reliable way to keep a character sounding identical across a whole campaign - including across languages, where the same cloned identity can carry over even though every word changes.

The obvious caveat: clone voices you have the right to clone. A voice is a personal characteristic in a growing number of jurisdictions, and consent for one campaign is not consent for all of them.

What Still Sounds Off After All That

Two things remain genuinely hard, and it is worth knowing them so you can write around them rather than fight them:

Emphasis on the semantically important word. People stress the word carrying new information - "I did not say she took it" versus "I did not say she took it". Models stress by position and punctuation instead, which is right most of the time and wrong in exactly the sentences where the meaning depends on it. If a line's meaning hinges on emphasis, rewrite it so the word order does the work instead.

Genuine hesitation. Real speech contains false starts, mid-sentence corrections and thinking noises, and these are a large part of why UGC sounds authentic. Scripted hesitation reads as performed hesitation almost every time. The better move is to write shorter, plainer sentences rather than to write in fake stumbles.

Common Mistakes

Judging a voice on a demo reel. Every voice sounds good reading text chosen to make it sound good. None of that text contains your brand name or your dosage.

Fix: preview on the real script, every time, before any video is generated.

Storing a phonetic respelling that is identical to the real name. It produces the absurd instruction that "RHODE" is pronounced "RHODE", and swaps one spelling for the same spelling while suppressing the fix that would actually have helped.

Fix: only store a respelling when it genuinely differs from the written name. Otherwise use the say-it-in-full instruction instead.

Putting phonetic spellings into the script itself. The captions then say "road" where the brand is Rhode, and every downstream consumer of the script inherits the misspelling.

Fix: keep the real spelling in the script and apply the phonetic version only at the synthesis step, or as an instruction to a self-voiced model.

Localizing the words and keeping the English number habits. A German script reading "null point null Prozent" is a sentence no German speaker has ever produced.

Fix: treat number reading as part of localization, not part of translation, and check it in every language separately.

FAQs

Is a self-voiced video model or separate TTS better?

Separate TTS gives more control and perfect voice consistency; a self-voiced model gives better synchronization between what the mouth does and what the voice does, because they were generated together. For a single presenter talking to camera, the self-voiced route usually looks better. For a campaign that has to sound identical across dozens of renders and languages, the fixed voice id usually wins.

Can I fix pronunciation after generation?

Only by regenerating. That is the case for spending the minute on the pre-render checklist: a wrong brand name is not a colour grade you can correct in post, it is a new render.

Why does the model sometimes add words at the end?

Models trained to produce natural speech tend to round a line off - repeating the ending, adding a sign-off, or paraphrasing the last clause. It needs an explicit instruction to speak the exact wording start to finish and not replace any part of it, including the ending. Worth checking on every render, because the ending is usually the call to action.

Does speaking rate matter for ads?

Yes, and faster than feels right is usually correct. Short-form viewers are habituated to a pace well above conversational, and a read that feels slightly rushed in isolation feels normal in a feed. What does not work is speeding up audio after the fact, which raises pitch and breaks lip-sync.

How do I keep the same voice across languages?

Use a cloned or fixed voice identity that carries across languages rather than picking a separate voice per market. The words change entirely, but the person does not, which is what makes a multi-market campaign feel like one campaign.

§ End · July 24, 2026
Was this useful?

Keep reading.

All posts
Localization

Why Native Generation Beats Lip-Sync Dubbing

What number reading and cadence do to a translated script.

AI Video

Burn Word-by-Word Captions with ffmpeg

The other half of the audio problem: what the script looks like on screen.

Skip the pipeline.
We already built it.

siriusly.ai chains Gemini Omni, Wan and Seedance chunks automatically - last-frame continuity, prompt drift-control and all - so you just write a brief.

Start free