TTS Pronunciation Benchmark: How Well Do Commercial Streaming TTS Models Handle Real-World Text? π
π Explore the interactive benchmark β listen to every audio sample, inspect per-unit judgments, and download all data.
TL;DR β TTS Pronunciation Benchmark
- π― What we tested: 4 commercial TTS models on 1,000+ sentences containing 2,200+ non-standard text items across 31 categories β all via real-time WebSocket streaming, with zero text preprocessing.
- π Top result: Async Flash v1.0 achieves 88.6% unit-level accuracy and 81.2% sentence-level accuracy, leading by a wide margin β all while staying under 200ms p95 latency.
- π The gap is real: The next-best model reaches 67.8% at the unit level β a 20+ point gap that widens dramatically on categories like measurement units, dates, and currencies.
- β‘ Why it matters: In production conversational AI, TTS models receive raw text over a streaming connection. No LLM cleanup. The model must normalize natively β and most don't do it well.
- π Fully open: All data, transcriptions, per-unit judgments, and audio samples are publicly available.
Why Text Normalization Matters π€
Every text-to-speech system must solve a deceptively hard problem: converting written symbols into natural spoken language. The string $42.50 should become "forty-two dollars and fifty cents", not "dollar sign four two period five zero." The date 03/15/2024 should be spoken as "March fifteenth, twenty twenty-four", not "zero three fifteen twenty twenty-four."
This process β called text normalization β is the first and most important step in the TTS pipeline. Get it wrong, and the output sounds broken no matter how natural the voice is.
In batch or REST API mode, providers can add an LLM step that cleans up text before the TTS model ever sees it. This works, but adds latency and cost. In real-time streaming β the interface used by conversational AI agents, voice assistants, and live applications β there is no time for that extra step. The TTS model gets raw text over a WebSocket and must figure it out on its own, in real time.
Despite its importance, no systematic benchmark existed for this capability β until now π
Evaluation Scope π
| Dimension | Detail |
|---|---|
| Test sentences | 1,000+ real-world sentences containing non-standard text |
| Normalization units | 2,200+ individually scored items |
| Categories | 31 (cardinal, currency, date, time, phone, URL, and more) |
| Models evaluated | 4 commercial TTS models from 3 providers |
| How audio is made | WebSocket streaming β no text cleanup, no LLM rewriting |
| Automated judge | Gemini 3.1 Pro with a category-specific evaluation rulebook |
| Human validation | 97% agreement between automated and expert linguist judgments |
Models Evaluated
| Model | Provider | Interface |
|---|---|---|
| Async Flash v1.0 | Async | Conversational streaming |
| ElevenLabs Flash v2.5 | ElevenLabs | Low-latency streaming |
| ElevenLabs Multilingual v2 | ElevenLabs | Multilingual |
| Inworld TTS-1 | Inworld | Real-time conversational |
Methodology π¬
ποΈ Audio Generation
All audio is generated through each provider's WebSocket streaming endpoint β the same low-latency connection used in production voice agents and conversational apps. The original text is sent directly to the model with no cleanup or LLM rewriting. This is intentional: the benchmark measures what happens under real production conditions, where text arrives raw and must be spoken immediately.
π§© Normalization Unit Extraction
Each sentence is analyzed to find the specific pieces of non-standard text that need to be spoken differently β things like $42.50, 03/15/2024, or 5'11". We call these normalization units. They are extracted by comparing the original text against a human-written spoken reference, then checked for accuracy. Each unit is tagged with one of 31 categories.
βοΈ Automated Judging
Gemini 3.1 Pro serves as the automated judge. For each audio sample, it:
- Listens to the synthesized audio.
- Transcribes what was actually spoken β using strict transcription rules that produce word-level spoken forms (no digits, no punctuation symbols).
- Evaluates each normalization unit independently against category-specific accept/reject criteria defined in a detailed rulebook.
The judge scores each unit on its own, so a mistake in one part of a sentence doesn't affect the score of other units.
π Evaluation Criteria
The main rule is simple: does it sound natural? If a native English speaker would say it that way in conversation, it passes. It only fails when information is lost, digits are wrong, or the phrasing is confusing. For codes and tokens (like passwords or API keys), there's one extra rule: a listener must be able to reconstruct the original string from what was spoken.
π Metrics
Two levels of accuracy are reported:
- Sentence-level accuracy: A sentence passes only when every normalization unit within it is pronounced correctly. This is the strictest measure.
- Unit-level accuracy: Each non-standard word is scored on its own β a more detailed view of where models succeed and fail.
Overall Results π
Sentence-Level Accuracy
A sentence is correct only when all normalization units are pronounced correctly β a strict, end-to-end measure.
| Model | Sentences | Correct | Accuracy |
|---|---|---|---|
| π₯ Async Flash v1.0 | 1,016 | 825 | 81.2% |
| π₯ Inworld TTS-1 | 1,019 | 507 | 49.8% |
| π₯ ElevenLabs Flash v2.5 | 1,022 | 412 | 40.3% |
| ElevenLabs Multilingual v2 | 1,021 | 387 | 37.9% |
Unit-Level Accuracy
Each non-standard word (date, number, abbreviation, etc.) is scored on its own for a more detailed picture.
| Model | Units | Correct | Accuracy |
|---|---|---|---|
| π₯ Async Flash v1.0 | 2,228 | 1,975 | 88.6% |
| π₯ Inworld TTS-1 | 2,232 | 1,514 | 67.8% |
| π₯ ElevenLabs Flash v2.5 | 2,243 | 1,266 | 56.4% |
| ElevenLabs Multilingual v2 | 2,235 | 1,181 | 52.8% |
Async Flash v1.0 leads at both levels β 20.8 points ahead of the next-best model on units and 31.4 points ahead on sentences. The sentence-level gap is wider because mistakes add up: a model that occasionally gets one word wrong will often fail the whole sentence.
Importantly, this accuracy doesn't come at the cost of speed. Async Flash v1.0 delivers these results while staying under 200ms end-to-end latency at p95 β fast enough for real-time conversation. π
Expert Linguist Validation π§βπ¬
Can an LLM really judge pronunciation accurately? To find out, we compared Gemini's automated scores against expert linguist review on a sample of ~300 sentenceβmodel pairs covering every category and all 4 providers.
97.4% HumanβLLM Agreement
Expert linguists disagreed with Gemini on just ~2.5% of ~300 reviewed pairs β only 3 unique sentences out of the entire sample. In all 3 cases, both answers were reasonable β the human simply accepted a pronunciation that the LLM marked as wrong.
Where Expert Linguist and LLM Disagree
| Category | Input | What happened | LLM | Human |
|---|---|---|---|---|
| date_time_mixed | "Release notes: 03/04/2025 β¦ EU vacation d/m is ambiguous." | TTS said "d m" instead of "d slash m." Gemini marked it wrong. Human said it's fine β people naturally drop separators when speaking. | β reject | β accept |
| phone | "He gave me his number as 212.555.7890β¦" | TTS said "two hundred twelve" for area code 212. Gemini marked it wrong. Human said it's fine β grouping area codes this way is common in everyday speech. | β reject | β accept |
| scientific | "I scored 10e3 points in the gameβ¦" | TTS said "ten e three" for 10e3. Gemini marked it wrong. Human said it's fine β "ten e three" is standard shorthand in technical speech. | β reject | β accept |
The pattern is clear: when the LLM and human disagree, the LLM is always stricter. This means the accuracy numbers in this benchmark are slightly conservative β real-world accuracy may be even higher across all models. β
Category Breakdown: Where Models Diverge π
The 31 categories reveal very different strengths and weaknesses across models. Here are the ones that tell the most interesting story π
π’ Categories Where Async Flash Dominates
| Category | Async Flash v1.0 | ElevenLabs Flash v2.5 | ElevenLabs Multi. v2 | Inworld TTS-1 |
|---|---|---|---|---|
| Measurement units (N=225) | 98.2% | 16.4% | 10.4% | 44.0% |
| Abbreviations (N=121) | 95.9% | 22.3% | 19.8% | 33.1% |
| URLs / emails (N=76) | 98.7% | 30.3% | 15.8% | 59.2% |
| Currencies (N=96) | 94.8% | 27.1% | 27.1% | 71.9% |
| Dates (N=61) | 94.8% | 23.0% | 18.0% | 47.5% |
| Math expressions (N=51) | 92.2% | 27.5% | 7.8% | 54.9% |
| Score/range (N=38) | 100.0% | 60.5% | 57.9% | 44.7% |
π‘ Measurement units show the starkest contrast: Async Flash correctly pronounces 98.2% of items like "5 mg/dL" or "3.2 km/h", while ElevenLabs Multilingual v2 manages only 10.4% β a nearly 10Γ difference.
β Categories Where Everyone Succeeds
| Category | Async Flash v1.0 | ElevenLabs Flash v2.5 | ElevenLabs Multi. v2 | Inworld TTS-1 |
|---|---|---|---|---|
| Ordinals (N=28) | 100.0% | 100.0% | 100.0% | 100.0% |
| Cardinals (N=337) | 97.3% | 93.1% | 93.6% | 94.3% |
| Acronyms (N=166) | 94.4% | 97.0% | 98.8% | 92.0% |
| Biology terms (N=20) | 90.0% | 90.0% | 90.0% | 85.0% |
Simple ordinals ("1st" β "first") and cardinal numbers ("42" β "forty-two") are effectively solved across the board. These are well-established patterns that all modern TTS systems handle reliably. π
π΄ Categories That Remain Unsolved
| Category | Async Flash v1.0 | ElevenLabs Flash v2.5 | ElevenLabs Multi. v2 | Inworld TTS-1 |
|---|---|---|---|---|
| Password tokens (N=52) | 21.2% | 7.7% | 7.7% | 9.6% |
| API tokens (N=20) | 35.0% | 33.3% | 23.8% | 23.8% |
| Scientific notation (N=54) | 40.7% | 48.1% | 38.9% | 40.7% |
Random character strings (passwords, API tokens) and scientific notation are hard for every model. These require reading exact characters one by one with no room for guessing β a very different challenge from reading dates or currencies. This is one of the most exciting areas for future improvement π§ͺ
What Goes Wrong: Failure Patterns π
Examining failure cases reveals three recurring patterns across lower-performing models.
1. Reading Raw Digits Instead of Understanding the Meaning
The most common failure β models read non-standard text as raw characters instead of recognizing what it actually is.
Input: "The event is on 05/20/2023." Expected: "The event is on May twentieth, twenty twenty-three." ElevenLabs Flash v2.5: "The event is on zero five twenty twenty three."
The model fails to recognize 05/20/2023 as a date and instead reads the digits sequentially. This pattern recurs across dates, currencies, and measurement units.
2. Partial Normalization
Some models correctly identify the type but drop components.
Input: "The event is on 05/20/2023." Expected: "The event is on May twentieth, twenty twenty-three." Inworld TTS-1: "The event is on May twentieth, twenty three."
The month and day are correct, but the year 2023 is shortened to "twenty three", losing "twenty" β a subtle error that changes the meaning.
3. Unnatural Hybrid Forms
Models sometimes produce technically correct but unnatural combinations.
Input: "I'll see you at 12:00AM..." Expected: "twelve A.M." ElevenLabs Flash v2.5: "twelve hundred A.M."
"Twelve hundred A.M." is a military/civilian hybrid that no native speaker would produce naturally π€·
π Hear these failures yourself in the Audio Explorer β every sample is playable directly from the benchmark dashboard.
Why Streaming Changes Everything β‘
These results may surprise readers who have heard impressive demos from TTS providers. The explanation is simple: it depends on how the text reaches the model.
Most TTS demos and batch API calls use a cleanup step: an LLM rewrites the input text before the speech model sees it, converting $42.50 to "forty-two dollars and fifty cents" ahead of time. The TTS model then just reads already-clean text.
In WebSocket streaming β the interface used by conversational AI in production β there is no cleanup step. Text arrives and must be spoken immediately. The TTS model itself has to figure out, in real time, that 03/15 is a date (not a fraction), that 5'11" is a height (not quotation marks), and that $42.50 is a price.
This benchmark tests exactly that streaming scenario. The wide performance gaps show which providers have built normalization intelligence into the model itself, versus relying on an external cleanup step that simply isn't available during real-time streaming.
Open Data π
Every data point behind this benchmark is publicly available. We believe in open, reproducible evaluation.
- π Per-sentence results β full transcriptions and unit-level judgments for every model
- π Aggregated metrics β by model and by category, downloadable as CSV
- π§ Audio samples β every evaluated sentence across all models, playable in-browser
- π Category-specific evaluation rulebook β defining accept/reject criteria for all 31 categories
We encourage the research community and TTS providers to examine the data, reproduce the evaluation, and submit additional models for inclusion in future updates π
Conclusion
Text normalization in streaming TTS is a hard, overlooked problem. Simple cases like numbers and ordinals are solved, but the long tail β dates in different formats, measurement units, URLs, currencies, math expressions β is where models really differ.
Async Flash v1.0 shows that getting this right in a streaming context is possible, reaching 88.6% unit-level accuracy across 31 categories. The 20+ point gap over competing models shows that building normalization directly into the model makes a real, measurable difference.
As conversational AI moves to production, the ability to correctly pronounce real-world text β not just clean, simple sentences β will increasingly separate the best TTS systems from the rest π―
π Explore the full benchmark β interactive charts, category breakdowns, and downloadable data.
π Try Async Flash v1.0 β the model that leads this benchmark. Free tier, no credit card required.
This benchmark is maintained by the Async Voice AI team. For questions, contributions, or to submit a model for evaluation, reach out through our Hugging Face Space.