Mandarin TTS Numeric Fidelity Benchmark | VoicePing Skip to main content
Text to Speech Mandarin TTS Voice Cloning Numeric Fidelity Speech AI Benchmark Fish Audio S2.1 CosyVoice IndexTTS Qwen3 TTS Chinese

How Mandarin TTS Models Read Numbers: A 600-Sample Voice-Cloning Benchmark

VoicePing- Kai-Teh Tzeng 9 min read
Abstract speech waveform branching into identifier, currency, formula, decimal, and measurement interpretations
In this article

We tested Fish Audio S2.1, CosyVoice3-RL, IndexTTS2, and Qwen3-TTS Base on 600 Mandarin voice-cloning samples containing decimals, identifiers, currencies, formulas, and scientific units.

Abstract

Numeric speech failures are semantic, not cosmetic. A TTS system can sound perfectly fluent while dropping zeros from an identifier, reading 9*14 as ninety-four, or stripping the exponent from an area measurement. Mandarin exposes this blind spot because the correct reading of 001000000066, 9*14, or 12cm² depends on the role the notation plays in the sentence—not merely on the symbols themselves.

We tested four voice-cloning model families—Fish Audio S2.1, CosyVoice3-RL, IndexTTS2, and Qwen3-TTS Base—using two Mandarin reference voices from our internal dataset. Each model-and-voice condition received the same 75 business-context sentences, for 600 generated audio samples in total.

On our automatic numeric exactness measure, Fish Audio S2.1 ranked first at 79.3% (119/150), ahead of CosyVoice3-RL at 74.7% (112/150). The headline hides sharply different behavior: CosyVoice3-RL reached 90.0% on identifiers, while Qwen3-TTS Base scored 0% on identifiers but led formulas and scientific units at 86.7% each.

This is an automatic screening benchmark, not a human listening test. Appendix B provides a separately generated listening set; those clips are not benchmark samples.

Why Numeric TTS Is a Semantic Problem

Reading a number correctly is not the same as pronouncing its digits clearly. A TTS model first has to infer the number’s role:

Display textIntended Mandarin readingWhat the model must infer
3786.712三千七百八十六点七一二Digits after the decimal point stay separate.
001000000066零零一零零零零零零零六六An identifier is a sequence, not a cardinal number.
HK$100一百港元The prefix specifies the currency; $100 alone does not.
9*14九乘以十四The symbol is an operator, not punctuation.
12cm^2十二平方厘米The exponent changes the unit from length to area.

A fluent sentence can therefore contain a serious numeric error. For IDs, money, measurements, and formulas, this can be more damaging than a small pronunciation defect.

Benchmark at a Glance

ItemDesign
ScopeVoice-cloning conditions only
Model familiesFish Audio S2.1, CosyVoice3-RL, IndexTTS2, Qwen3-TTS Base
Reference voicesTwo Mandarin references from an internal dataset
Prompts per model family150: 75 prompts × 2 reference voices
Total audio600 generated WAV files
Numeric dimensionsDecimal, identifier, currency, formula, scientific/engineering unit
Prompts per dimension15 per model-and-voice condition
Input policySend the exact sentence containing Arabic-digit notation
Currency ambiguityScore bare $ and ¥ at the symbol-family level; require an exact currency for explicit codes or names
Headline judgeQwen3-ASR-1.7B, pinned revision
Primary metricExact semantic match for the numeric target

Experiment Design

1. Build Five Balanced Prompt Groups

We used 75 Mandarin sentences per model-and-voice condition: 15 prompts in each of five numeric dimensions.

  1. Decimals tested internal zeros, repeated digits, and trailing fractional zeros.
  2. Identifiers used synthetic, non-attributable long digit strings with leading and repeated zeros that must not be collapsed into cardinal numbers.
  3. Currencies covered USD, CNY, JPY, CAD, AUD, SGD, and HKD, including ambiguous $ and ¥ symbols.
  4. Formulas covered multiplication and division, including equivalent readings such as 二分之三 and 三除以二.
  5. Scientific and engineering units covered cm, µm, and nm.

Every carrier sentence was individually authored as a plausible business, engineering, logistics, or operations message rather than produced by swapping targets into one template.

2. Hold the Voice References Constant

All four model families cloned the same two Mandarin reference voices from our internal dataset.

Scores combine both references, producing 150 evaluated samples per model family.

3. Send the Display Sentence Exactly as Written

The benchmark deliberately did not expand digits before synthesis.

For example:

1
维修平台确认,本次设备校验码为001000000066。

We did not replace the number with the expected reading:

1
维修平台确认,本次设备校验码为零零一零零零零零零零六六。

This isolates the model’s text-normalization behavior. In production, pre-expanding critical numbers is often the safer design; here it would have removed the question we wanted to measure.

4. Generate and Normalize the Audio

The open-weight models ran from pinned checkpoints with deterministic seeds where supported. Every Fish Audio S2.1 request used normalize=true. The service ran in normal latency mode, so its scores describe Fish Audio S2.1 with the provider normalizer enabled.

Provider outputs were normalized to mono, 24 kHz, 16-bit PCM WAV, then verified for channel count, sample rate, sample width, and decodability.

All 600 generated samples passed this format check.

5. Transcribe and Score Numeric Meaning

Each generated file was transcribed with the same pinned Qwen/Qwen3-ASR-1.7B revision. We converted the ASR transcript and target into category-aware canonical values, then required an exact match. A missing zero, changed operator, conflicting currency, or lost exponent therefore failed even when the surrounding sentence was fluent. The category-specific rules are documented in Appendix A .

Results

Heat map comparing combined, decimal, identifier, currency, formula, and scientific-unit exactness across four Mandarin TTS model families

The results aggregate the two internal reference voices. Currency outputs were rescored from the stored validator transcripts using the ambiguity-aware policy in Appendix A. Each combined score is based on 150 samples; each category score is based on 30.

Fish Audio S2.1 led overall at 79.3%, but no model won every category. The more useful result is how differently the models failed depending on whether the same digits represented an identifier, a decimal, a currency amount, a formula, or a unit.

Identifiers: The Largest Model Gap

Model familyExact (n=30)
Fish Audio S2.166.7%
CosyVoice3-RL90.0%
IndexTTS240.0%
Qwen3-TTS Base0.0%

Identifiers produced the widest score gap. The main failure was not pronunciation quality but sequence integrity: models grouped digits, omitted repeated zeros, or inserted an extra digit.

Decimals: Broadly Reliable

Model familyExact (n=30)
Fish Audio S2.193.3%
CosyVoice3-RL96.7%
IndexTTS2100.0%
Qwen3-TTS Base93.3%

Decimals were the most reliable category. Their familiar spoken structure made them easier than identifiers, which require strict preservation of every position.

Currency: Separate the Amount from the Symbol

Model familyExact (n=30)
Fish Audio S2.193.3%
CosyVoice3-RL46.7%
IndexTTS293.3%
Qwen3-TTS Base86.7%

We judged the spoken amount and currency meaning separately. A bare $ does not uniquely specify a regional currency, while an explicit CAD or 加拿大元 requires a Canadian-dollar reading. In the scored samples, Fish Audio S2.1 read an explicit HK$100 as US dollars, while most CosyVoice3-RL failures changed the amount itself.

Formulas: Operators Are Easily Lost

Model familyExact (n=30)
Fish Audio S2.173.3%
CosyVoice3-RL70.0%
IndexTTS270.0%
Qwen3-TTS Base86.7%

A correct-sounding number could conceal a semantic failure: when the multiplication operator disappeared, 9*14 became 94.

Scientific and Engineering Units: Exponents Must Survive

Model familyExact (n=30)
Fish Audio S2.170.0%
CosyVoice3-RL70.0%
IndexTTS266.7%
Qwen3-TTS Base86.7%

The base value and unit could remain intelligible even when the squared exponent disappeared, changing an area measurement into a different meaning.

Model Takeaways

Model familyCombined (n=150)Main takeaway
Fish Audio S2.179.3%Highest combined score; identifiers were its weakest category at 66.7%
CosyVoice3-RL74.7%Strongest on identifiers; frequently changed currency amounts
IndexTTS274.0%Perfect on decimals; much weaker on identifiers
Qwen3-TTS Base70.7%Strong on formulas, currency, and units; failed every identifier prompt

Reproducibility Snapshot

ComponentPin or policy
Qwen3-TTS BaseQwen3-TTS-12Hz-1.7B-Base, revision fd4b254389122332181a7c3db7f27e918eec64e3
CosyVoice3-RLFun-CosyVoice3-0.5B-2512_RL, revision 29e01c4e8d000f4bcd70751be16fa94bf3d85a18
IndexTTS2IndexTTS2, revision 740dcaff396282ffb241903d150ac011cd4b1ede
Fish Audio S2.1Synthesis service; normal latency mode; normalize=true
Validator ASRQwen/Qwen3-ASR-1.7B, revision 7278e1e70fe206f11671096ffdd38061171dd6e5

Limitations

  • The judge is an ASR model, not a native-listener panel. ASR errors can be mistaken for TTS errors.
  • The two internal reference voices do not represent all Mandarin speakers, accents, pitches, or recording conditions.
  • The benchmark tests raw display notation. A production text-normalization layer can improve results substantially.
  • Percentages come from 30 samples per model family and dimension after aggregating two voices; small differences should not be over-interpreted.
  • Provider services and model implementations can change after the pinned evaluation date.

Conclusion

There was no universal winner for Mandarin numeric TTS.

Fish Audio S2.1 was the most balanced model family and the combined leader at 79.3%. CosyVoice3-RL was strongest for identifiers. IndexTTS2 was perfect on decimals but weaker on long digit sequences. Qwen3-TTS Base was strongest across the three symbol-heavy categories while failing every identifier item.

The practical lesson is broader than the ranking: numeric meaning is a separate reliability dimension. If a spoken number can change a payment, measurement, route, identity, or access decision, normalize it explicitly and verify it after synthesis.

Appendix A: Category-Specific Normalization Rules

CategoryNormalization strategy and exact-match rule
DecimalConvert Arabic and Chinese numerals to decimal form while preserving every fractional digit, including trailing zeros.
IdentifierExtract the full digit sequence, normalize spoken digit variants—including to 1—and preserve leading zeros, order, and length.
CurrencyNormalize the amount, then derive the allowed currency from the written input. Bare $ accepts a dollar-denominated reading, while bare ¥ accepts either 人民币 or 日元; explicit forms such as US$, HK$, JPY, or a currency name require the matching Mandarin currency reading.
FormulaFirst convert Chinese or Arabic numerals into numeric operands. Then map /乘以/×/* to multiply, and 除以///÷/分之 to divide. Because A分之B means B ÷ A, reverse its surface operand order when storing it. Finally, compare the operator and ordered operands exactly without calculating the result. This is why 三除以二 and 二分之三 both match 3/2, while 一点五 fails: it contains the result but no operator.
Scientific or engineering unitFirst normalize the numeric value. Then map spoken and written aliases—such as 厘米/cm, 微米/µm, and 纳米/奈米/nm—to one base unit. Record 平方, ², or ^2 as exponent 2; otherwise use exponent 1. The value, base unit, and exponent must all match. Therefore 12cm² and 十二平方厘米 pass, while 十二厘米 fails because it changes the exponent from 2 to 1.

Appendix B: Public Audio Examples

Why include listening examples? Aggregate scores show how often a model produced the intended reading, but not what its errors sound like. These examples make the main failure modes concrete: a missing or grouped digit, a changed decimal structure, an omitted operator, or a dropped exponent. Use them only as listening examples: this separate 20-clip demonstration set was not part of the 600-sample benchmark and did not contribute to the reported percentages.

Synthetic Reference Used for the Demos

All four systems used the same AI-generated Qwen3-TTS Serena clip as their voice reference. Listen to it first to establish the common voice that the demonstrations below attempt to reproduce.

Reference text: 今天我们将讨论项目进度、客户反馈与后续安排。请各位确认会议内容,并在结束后整理需要继续跟进的事项,感谢大家的配合。

Identifier Example

Input: 维修平台确认,本次设备校验码为001000000066。

Target: 零零一零零零零零零零六六

Model familyExample audio and ASR transcriptWhat to notice
Fish Audio S2.1
零零幺零零零零零零六六
One zero is omitted
CosyVoice3-RL
零零幺零零零零零零零六六
All digits are preserved
IndexTTS2
零零幺零零零零零零六六
One zero is omitted
Qwen3-TTS Base
零零幺零零万零六六
Digits are grouped and omitted

Decimal Example

Input: 值班工程师在电话会上报告:“主回路当前读数是3168.846。”

Target: 三千一百六十八点八四六

Model familyExample audio and ASR transcriptWhat to notice
Fish Audio S2.1
三幺六八八四六
Decimal structure is lost
CosyVoice3-RL
三千一百六十八点八四六
Target reading is preserved
IndexTTS2
三千一百六十八点八四六
Target reading is preserved
Qwen3-TTS Base
三千一百六十八点八四六
Target reading is preserved

Currency Example

Input: 设计负责人提醒大家,加拿大外包插画的尾款还有$640未付。

Accepted meaning: the amount 640 plus a dollar-denominated reading

Model familyExample audio and ASR transcriptWhat to notice
Fish Audio S2.1
六百四十美元
Amount and dollar reading are preserved
CosyVoice3-RL
六百四十美元
Amount and dollar reading are preserved
IndexTTS2
六百四十美元
Amount and dollar reading are preserved
Qwen3-TTS Base
六百四十美元
Amount and dollar reading are preserved

Formula Example

Input: 生成标签底稿时,把画布网格参数填写为9*14。

Target: 九乘以十四

Model familyExample audio and ASR transcriptWhat to notice
Fish Audio S2.1
九州十四
Multiplication operator is not recovered
CosyVoice3-RL
九十四
Multiplication operator is omitted
IndexTTS2
九掺十四
Multiplication operator is not recovered
Qwen3-TTS Base
九乘以十四
Target reading is preserved

Scientific and Engineering Unit Example

Input: 封装测试要求导热贴的接触面积达到12cm^2。

Target: 十二平方厘米

Model familyExample audio and ASR transcriptWhat to notice
Fish Audio S2.1
十二厘米定二
Squared-area meaning is lost
CosyVoice3-RL
十二厘米二
Squared-area meaning is lost
IndexTTS2
十二厘米,S二
Squared-area meaning is lost
Qwen3-TTS Base
十二厘米方
Square-centimeter meaning is lost
Share this article

Try VoicePing for Free

Break language barriers with AI translation. Start with our free plan today.