AI Text to Speech: Choosing a Voice That Fits
Here's the quick before and after. Same product, same voice engine, very different result.
Weak input: Introducing our new ProLite 2 Bottle, only $42.50, available Dr. Lee's store on 10/9. It is made of stainless steel and keeps drinks cold for a long time!!!
Stronger input: Meet the ProLite 2 bottle. Stainless steel. Cold drinks stay cold all day. It's forty-two dollars and fifty cents, and it lands on October ninth at Doctor Lee's store.
The first one hands the engine a currency symbol, an abbreviation and an ambiguous date, then asks it to guess. The second reads like someone talking. Most "robotic" AI text to speech isn't the voice's fault. It's the script.
This post is about choosing a voice that fits the job, then writing and tuning the text so the voice sounds like it means it.
Start with the job, not the voice list
Before you audition anything, write one line: who is speaking, to whom, and where will people hear it? A product demo on a phone feed, a calm explainer, and a character in a short film need three different voices.
Ask these four questions:
- Who's the speaker? A friendly shop owner, a narrator, a customer. Pick an age range, energy level and accent that match.
- Where's it played? Phone speakers in a noisy feed need a clear, mid-paced voice. A long-form tutorial can take a slower, warmer one.
- How long is it? A voice that's charming for 10 seconds can grate over 3 minutes.
- Which language and accent? This one is easy to get wrong. ElevenLabs' docs say that for the most natural results you should choose a voice whose accent matches the target language and region. OpenAI's docs note that its voices are optimized for English, so other languages can vary in quality. Test your actual language before you commit.
Audition with your real script
Don't judge a voice from its demo clip. Paste a real 2 or 3 sentence chunk of your script, including the awkward bits: a product name, a number, a question. Then listen for:
- Does it stress the right word in the sentence?
- Does it handle your brand name and any acronyms?
- Does the tone survive the whole paragraph, or drift?
- Does it match the voice of anything else in your video, such as a character's look?
ElevenLabs' best-practice guide makes a useful point here: deliveries that exist in a voice's training data, such as whispering or shouting, are easier to reproduce. It also says to match emotion tags to the voice's character, because a serious professional voice may not suit playful cues. So a calm narrator voice probably won't become a convincing excited host just because you ask nicely.
Write for the ear
Text that reads well on a page often sounds stiff aloud. A few habits fix most of it:
- Short sentences. One idea each. Read them aloud yourself first.
- Contractions. "It's" sounds human. "It is" sounds like a notice.
- Spell out the tricky stuff. ElevenLabs recommends expanding currency, abbreviations and phone numbers, for example turning
$42.50into "forty-two dollars and fifty cents" andDr.into "Doctor". Its guide says smaller models may mispronounce these, and larger ones handle them better. If an LLM drafts your script, tell it to write numbers and abbreviations out in words. - Use punctuation as direction. ElevenLabs notes that ellipses add pauses and weight, and capitalization adds emphasis, on its newer models. Other engines respond differently, so test.
- Cut the exclamation marks. Three in a row rarely means "excited." It more often means "strained."
Pauses, emphasis and pronunciation
Control options depend entirely on the engine, and this is where people get caught out.
Google Cloud's text-to-speech uses SSML, a markup language. Its SSML documentation lists tags like these:
<break time="1s"/>for a pause<prosody rate="slow" pitch="-2st">Can you hear me now?</prosody>for pace and pitch<sub alias="World Wide Web Consortium">W3C</sub>to say a different word than the one written<phoneme alphabet="ipa" ph="ˌmænɪˈtoʊbə">manitoba</phoneme>for a custom pronunciation
Google also warns to wrap whole sentences in emphasis and prosody, because wrapping single words can cause unwanted pauses.
Now the catch. The ElevenLabs guide says its Eleven v4 and v3 models don't support SSML break tags, so there you use punctuation and text structure instead. Where <break> is supported, it allows pauses up to 3 seconds, and the guide advises against using many in one generation because it can cause instability. Don't paste SSML into a tool that doesn't read it, or you may hear nonsense or see tags in the output.
If you can't control pronunciation with markup, spell the word phonetically in the script. Write "Sah-REE-na" if that's what you need. It looks odd on the page, and nobody sees the page.
Steering tone with plain-language instructions
Some engines take a style instruction rather than markup. OpenAI's speech documentation says that with gpt-4o-mini-tts the instructions parameter can control accent, emotional range, intonation, speaking speed, tone and whispering. A useful instruction is specific and short:
Warm, relaxed, like a friend recommending a product. Slightly slower than normal. Smile on the last line.
Not: Sound amazing.
One honest limit, as of November 2026: OpenAI's page says tts-1, tts-1-hd and gpt-4o-mini-tts are deprecated and shut down on January 6, 2027. Vendors retire models regularly, so don't build a workflow that depends on one engine's exact sound. Keep your script and notes portable.
Also be careful with emotional cues in the text itself. ElevenLabs' docs say descriptive text such as "she said excitedly" is spoken aloud unless you trim it, and with v4 the model may read emotional guidance aloud, so remove unwanted cues in post.
Expect run-to-run variation
Voice generation isn't deterministic. ElevenLabs states that its output is nondeterministic, and that a seed parameter improves consistency but subtle differences may remain. In practice:
- Generate two or three takes of an important line and pick the best.
- For long scripts, split into chunks by paragraph. ElevenLabs suggests this for long texts, and its
previous_textandnext_textparameters help keep the flow natural across chunks. That's an API feature of that vendor, so check whether your tool exposes something similar. - Keep the same voice and settings for the whole project so a video doesn't change speaker halfway through.
Where this fits in a creator workflow
A voice is rarely the whole job. You usually have a picture or clip to match it to.
In Mediafy Studio, you can choose Audio alongside Image and Video, pick a model and write your prompt. If you're building a repeat character, you can design an AI influencer once and reuse the same face and voice across images and videos, which helps avoid a presenter who sounds different every week. The Enhance button can expand a short prompt, but for spoken lines I'd still write the final wording yourself so the numbers and names are right.
If you want the sequence automated, a Flow can chain image, then video, then voice-over and run the whole thing. We cover that in Flows in Mediafy Studio: Chain Image, Video and Voice. And if you'd rather have speech generated inside the video itself, see Veo 3.1 Native Audio: How to Prompt Sound and Speech. Credit costs show on the Generate button before you run anything, and failed generations are refunded.
Common mistakes
- Choosing by demo clip instead of testing your own script.
- Leaving numbers, dates and abbreviations raw. Write
October ninth, not10/9. - Using SSML on an engine that ignores it, or ignoring it on one that supports it.
- Overlong takes. Fix a single line and regenerate that line, not the whole script.
- Mismatched mood. A bubbly voice reading a serious refund policy feels off.
- Skipping the audience. OpenAI's usage policies require you to clearly tell end users that a voice is AI-generated, not human. Check the rules of your platform and your client too.
- Cloning a voice without permission. OpenAI's custom voices need a consent recording. Treat that as the standard everywhere.
A simple checklist
- Write one line describing the speaker and where it plays.
- Rewrite the script for the ear: short, contracted, numbers in words.
- Audition 2 or 3 voices on the same 3 sentences.
- Fix pronunciation with markup or phonetic spelling, depending on the engine.
- Generate a few takes, keep the best, and hold the voice steady across the project.
- Add a disclosure where required.
Ready to pair a voice with images and video? Sign in to Mediafy Studio and try it on one short script.
Sources
- OpenAI, "Text to speech" (API docs): https://developers.openai.com/api/docs/guides/text-to-speech
- Google Cloud, "SSML" (Cloud Text-to-Speech documentation): https://docs.cloud.google.com/text-to-speech/docs/ssml
- ElevenLabs, "Text to speech" (capabilities overview): https://elevenlabs.io/docs/overview/capabilities/text-to-speech
- ElevenLabs, "Text to speech best practices": https://elevenlabs.io/docs/overview/capabilities/text-to-speech/best-practices