
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 text | Intended Mandarin reading | What 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
| Item | Design |
|---|---|
| Scope | Voice-cloning conditions only |
| Model families | Fish Audio S2.1, CosyVoice3-RL, IndexTTS2, Qwen3-TTS Base |
| Reference voices | Two Mandarin references from an internal dataset |
| Prompts per model family | 150: 75 prompts × 2 reference voices |
| Total audio | 600 generated WAV files |
| Numeric dimensions | Decimal, identifier, currency, formula, scientific/engineering unit |
| Prompts per dimension | 15 per model-and-voice condition |
| Input policy | Send the exact sentence containing Arabic-digit notation |
| Currency ambiguity | Score bare $ and ¥ at the symbol-family level; require an exact currency for explicit codes or names |
| Headline judge | Qwen3-ASR-1.7B, pinned revision |
| Primary metric | Exact 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.
- Decimals tested internal zeros, repeated digits, and trailing fractional zeros.
- Identifiers used synthetic, non-attributable long digit strings with leading and repeated zeros that must not be collapsed into cardinal numbers.
- Currencies covered USD, CNY, JPY, CAD, AUD, SGD, and HKD, including ambiguous
$and¥symbols. - Formulas covered multiplication and division, including equivalent readings such as
二分之三and三除以二. - Scientific and engineering units covered
cm,µm, andnm.
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:
| |
We did not replace the number with the expected reading:
| |
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

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 family | Exact (n=30) |
|---|---|
| Fish Audio S2.1 | 66.7% |
| CosyVoice3-RL | 90.0% |
| IndexTTS2 | 40.0% |
| Qwen3-TTS Base | 0.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 family | Exact (n=30) |
|---|---|
| Fish Audio S2.1 | 93.3% |
| CosyVoice3-RL | 96.7% |
| IndexTTS2 | 100.0% |
| Qwen3-TTS Base | 93.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 family | Exact (n=30) |
|---|---|
| Fish Audio S2.1 | 93.3% |
| CosyVoice3-RL | 46.7% |
| IndexTTS2 | 93.3% |
| Qwen3-TTS Base | 86.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 family | Exact (n=30) |
|---|---|
| Fish Audio S2.1 | 73.3% |
| CosyVoice3-RL | 70.0% |
| IndexTTS2 | 70.0% |
| Qwen3-TTS Base | 86.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 family | Exact (n=30) |
|---|---|
| Fish Audio S2.1 | 70.0% |
| CosyVoice3-RL | 70.0% |
| IndexTTS2 | 66.7% |
| Qwen3-TTS Base | 86.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 family | Combined (n=150) | Main takeaway |
|---|---|---|
| Fish Audio S2.1 | 79.3% | Highest combined score; identifiers were its weakest category at 66.7% |
| CosyVoice3-RL | 74.7% | Strongest on identifiers; frequently changed currency amounts |
| IndexTTS2 | 74.0% | Perfect on decimals; much weaker on identifiers |
| Qwen3-TTS Base | 70.7% | Strong on formulas, currency, and units; failed every identifier prompt |
Reproducibility Snapshot
| Component | Pin or policy |
|---|---|
| Qwen3-TTS Base | Qwen3-TTS-12Hz-1.7B-Base, revision fd4b254389122332181a7c3db7f27e918eec64e3 |
| CosyVoice3-RL | Fun-CosyVoice3-0.5B-2512_RL, revision 29e01c4e8d000f4bcd70751be16fa94bf3d85a18 |
| IndexTTS2 | IndexTTS2, revision 740dcaff396282ffb241903d150ac011cd4b1ede |
| Fish Audio S2.1 | Synthesis service; normal latency mode; normalize=true |
| Validator ASR | Qwen/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
| Category | Normalization strategy and exact-match rule |
|---|---|
| Decimal | Convert Arabic and Chinese numerals to decimal form while preserving every fractional digit, including trailing zeros. |
| Identifier | Extract the full digit sequence, normalize spoken digit variants—including 幺 to 1—and preserve leading zeros, order, and length. |
| Currency | Normalize 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. |
| Formula | First 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 unit | First 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 family | Example audio and ASR transcript | What 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 family | Example audio and ASR transcript | What 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 family | Example audio and ASR transcript | What 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 family | Example audio and ASR transcript | What 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 family | Example audio and ASR transcript | What 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 |


