Five TTS Models, Four Languages: Which One Should You Actually Use
Six models read the same sentences in four languages.
The most reliable way to pick a text-to-speech model is to listen to it. So we had six models read the same sentences in Korean, English, Chinese, and Japanese, and lined up 68 samples, grouped by language. You only need to open the section for the language you actually ship.
Here’s the short version first.
| Language | If you need real-time | If you need quality | Avoid |
|---|---|---|---|
| Korean | VoxCPM2 (RTF 0.100) | Supertonic-3 | Kokoro (unsupported) |
| English | Kokoro-82M (CPU is enough) | Any of them (small gap) | None |
| Chinese | VoxCPM2 | Qwen3-TTS | Zonos (broken) |
| Japanese | VoxCPM2 | Supertonic-3 | All models need review |
Korean
Four models support Korean. Kokoro-82M is missing because it doesn’t support the language at all.
오늘 회의는 오후에 삼층 회의실에서 시작합니다. (Today’s meeting starts on the third floor this afternoon.)
Qwen3-TTS
VoxCPM2
Zonos
Supertonic-3
Chatterbox-ML
어제 회의에서 결정된 내용을 반영해 초안을 수정했지만, 검토가 아직 끝나지 않아서 오늘 배포는 어려울 것 같습니다. (I revised the draft to reflect yesterday’s decisions, but since review isn’t finished, shipping today looks unlikely.)
Qwen3-TTS
VoxCPM2
Zonos
Supertonic-3
Chatterbox-ML
Supertonic-3 is the clearest of the four. On the intelligibility sub-axis it scores 63.84, the highest of the set, and it holds a similar lead in the other languages too. The cost is an RTF of 2.498, two and a half times slower than real time, which puts it squarely in the pre-rendered announcement bucket rather than anything live.
If you need real time, VoxCPM2 wins outright at an RTF of 0.100. But its intelligibility sits at 48.63, the lowest of the group. Qwen3-TTS lands at 61.46 in the same language, a 13-point gap. The voice itself sounds the most human of any model here (it tops the speaker sub-axis at 71.79), but that combination comes with phonemes that blur together, so if you’re planning to read numbers or codes out loud, you need preprocessing in front of it, no exceptions.
Zonos sits in between at an RTF of 0.592, still inside real-time bounds. It does accept emotion instructions, but as you’ll see further down, the output doesn’t actually move toward the emotion you asked for, so it’s not one to reach for if emotional control is the point.
English
All five models support English.
The meeting will start this afternoon in the third floor conference room.
Qwen3-TTS
VoxCPM2
Zonos
Supertonic-3
Chatterbox-ML
Kokoro-82M
I revised the draft to reflect what we decided yesterday, but since the review is not finished, shipping today seems unlikely.
Qwen3-TTS
VoxCPM2
Zonos
Supertonic-3
Chatterbox-ML
Kokoro-82M
Quality doesn’t do much to separate these five in English. Overall naturalness clusters tightly between 70.09 and 76.45, and every model’s median transcription error is zero. With quality this close, the deciding factors are speed and cost.
On that front, Kokoro-82M stands out. On 32 CPU cores it runs at an RTF of 0.640, faster than real time, while still hitting a naturalness score of 73.87, within three points of the GPU-backed models. If English and Chinese are all you need, you can run the whole pipeline without touching a GPU.
Chinese
Four models claim to support Chinese, but only three are actually usable.
会议将在今天下午于三楼会议室举行。 (The meeting will be held this afternoon on the third floor.)
Qwen3-TTS
VoxCPM2
Zonos
Chatterbox-ML
Kokoro-82M
我已经按照昨天的决定修改了草稿,但因为评审还没结束,今天上线恐怕来不及。 (I revised the draft per yesterday’s decision, but since review isn’t finished, today’s launch probably won’t make it.)
Qwen3-TTS
VoxCPM2
Zonos
Chatterbox-ML
Kokoro-82M
Qwen3-TTS is the safe pick. It scores 56.89 on intelligibility versus VoxCPM2’s 50.00, and its 90th-percentile transcription error comes in at 0.289 against VoxCPM2’s 0.435, a noticeably shorter tail. Chinese is where the spread between the median and the worst cases opens up the most, so judging by the median alone will steer you wrong.
⛔ Do not use Zonos for Chinese. As you heard in the samples above, what comes out isn’t a sentence, it’s the same syllable repeated. The model’s language list on its own repo includes Chinese, but our measured error rate ranged from 1.0 to 6.9. A support list is a claim, not a measurement.
Japanese
All four models here support Japanese.
会議は今日の午後、三階の会議室で始まります。 (The meeting starts this afternoon on the third floor.)
Qwen3-TTS
VoxCPM2
Zonos
Supertonic-3
Chatterbox-ML
昨日の会議で決まった内容を反映して草案を修正しましたが、レビューがまだ終わっていないため、今日のリリースは難しそうです。 (I revised the draft to reflect yesterday’s meeting outcome, but since review isn’t finished, today’s release looks difficult.)
Qwen3-TTS
VoxCPM2
Zonos
Supertonic-3
Chatterbox-ML
Supertonic-3 leads here too. Overall naturalness comes in at 68.08, the highest of the four, and its intelligibility of 62.99 is also the best-balanced of the set. Median transcription error sits at 0.008, essentially perfect.
Still, whichever model you pick, budget time for human review. At the 90th percentile, Qwen3-TTS climbs to 0.413 and VoxCPM2 to 0.438. Of the four languages, Japanese consistently had the longest tail.
What happens when you feed it numbers and code
The median transcription error is close to zero for nearly every language. But the 90th percentile jumps hard. That’s not error spread evenly across the board; it means errors cluster in specific categories. Split by category and plain statements, questions, and compound sentences come out nearly flawless, while numbers and technical jargon are where things fall apart.
Here are two utterances that actually failed. Compare the source text to what you hear, and you’ll be able to pinpoint exactly where it breaks.
(technical) API 응답 코드가 503에서 200으로 정상화되었습니다. (The API response code recovered from 503 to 200.)
Zonos · error 14.0968
(technical) モデル名は Qwen3-TTS-12Hz-1.7B で、ライセンスは Apache 2.0 です。 (The model name is Qwen3-TTS-12Hz-1.7B, licensed under Apache 2.0.)
Zonos · error 0.973
For reading a news article aloud, this is harmless. For a service that has to read out amounts, dates, or product codes, these two categories are exactly where it will bite you. All five models showed the same pattern, so this isn’t one model’s defect, it looks like a shared trait of this generation of TTS. Spelling numbers out into text before synthesis is a thin, cheap preprocessing step, and it’s a lot more reliable than switching models.
How much does emotion instruction actually change
We synthesized the same sentence in six emotions. The first is a model with strong emotional range, the second has no emotion control at all.
Qwen3-TTS
그 사람이 방금 문을 열고 들어왔어요.
The only model where range and accuracy are both significant. The tone shifts, and it shifts toward what was asked for.
Neutral
Happy
Sad
Angry
Fear
Surprise
Zonos
그 사람이 방금 문을 열고 들어왔어요.
The largest shift of any model. Yet a classifier does not recover the requested emotion from it.
Neutral
Happy
Sad
Angry
Fear
Surprise
Chatterbox-ML
그 사람이 방금 문을 열고 들어왔어요.
The same signature as Zonos. The audio clearly moves; the accuracy sits at chance.
Neutral
Happy
Sad
Angry
Fear
Surprise
Kokoro-82M
He just walked through the door a moment ago.
Six identical renditions. It has no emotion control at all, which is what makes it the noise floor.
Neutral
Happy
Sad
Angry
Fear
Surprise
Emotional expressiveness by model
Turning what you just heard into numbers, we measured two separate things. Expressive range is how much pitch, intensity, and pause prosody actually shift when you change the emotion. Hit rate is how often a speech-emotion classifier, fed that resulting audio, labels it with the emotion you actually asked for.
| Model | Expressive range | vs. floor | Hit rate | vs. chance | Emotion conditioning |
|---|---|---|---|---|---|
| Qwen3-TTS | 0.408 | 16.9x | 0.403 | 2.42x | Instruct-style text prompt |
| Zonos | 0.452 | 18.8x | 0.167 | 1.00x | Direct 8-dim real-valued vector |
| Chatterbox-ML | 0.445 | 18.4x | 0.181 | 1.08x | Exaggeration scalar |
| Supertonic-3 | 0.255 | 10.6x | 0.222 | 1.33x | Inline style tags |
| Kokoro-82M | 0.024 | 1.0x | 0.167 | 1.00x | None |
| VoxCPM2 | not measurable | Reference-audio pairing only |
What to notice is that the top three rows are effectively tied on expressive range. Zonos at 0.452, Chatterbox-ML at 0.445, Qwen3-TTS at 0.408, all roughly seventeen times the floor. Move to hit rate and the first two collapse to chance while only Qwen3-TTS survives.
The confusion matrix makes this concrete. When we asked Zonos for anger, it was classified as happy 3 times, disgusted 5 times, sad 2 times, and angry zero times. Ask for happy and you get neutral 6 times, sad 3 times. The audio genuinely changes, it just doesn’t change toward what was asked for.
Chatterbox-ML landing in the same place matters more than either result alone. Two models with different conditioning interfaces, different training, and different authors arrived independently at the same signature. That points at something general: moving prosody and aiming that movement are separate capabilities. Several models have the first. Most do not have the second.
Qwen3-TTS is the one model where both metrics agree and both are significant. 16.9x expressive range, 2.42x hit rate: the sound changes, and it changes in the direction you asked for. If you need emotional control, this is the model.
Picking on expressive range alone would have gotten two of six models wrong, so the emotion axis has to be read on both metrics together, never one alone.
It splits by language too. Qwen3-TTS stays consistent, 0.386 to 0.443 across the four languages, but Supertonic-3 dips unusually low in English at 0.157 and more than doubles that in Japanese at 0.354. Same model, different language, different amount of traction on the emotion instruction, so if you’re running a multilingual service, verify separately in whichever language you ship.
VoxCPM2 is missing from the table above, and not because it performs badly. This model only accepts emotion paired with a reference audio clip. Ask for an emotion without a reference and the synthesis simply fails outright. Had we quietly substituted a neutral voice in that case, it would have gotten logged as “a model with no emotional variation,” when in truth the condition never even applied, so we left it out honestly instead.
The six clips under Kokoro-82M above probably sounded like the same recording to you, and that’s because the model has no emotion control, so all six requests fed it identical input. That makes it the floor for this metric. Its emotion classifier’s hit rate is exactly 0.167, which is precisely the chance probability of landing on the right one of six emotions if you picked randomly.
Once you know where the floor sits, the rest of the table reads differently. By expressive range alone, Zonos leads at 0.452, but as you heard, that motion doesn’t land on the requested emotion. Qwen3-TTS is the only model where both metrics come out significant together.
Even so, keep the absolute numbers in perspective. Even the best-performing model doesn’t get the requested emotion through to the classifier more than half the time. Think of emotion instructions less as a switch that flips a feeling on, and more as a dial that nudges the output slightly in that direction.
The numbers, all in one place
Left: naturalness by language. Right: the relationship between speed and intelligibility.
The chart on the right is the summary of this whole post. Further left is faster, further up is clearer, and nothing sits in the upper left. VoxCPM2, the fastest, sits at the bottom. Supertonic-3, the clearest, sits at the far right. Speed and intelligibility didn’t arrive together in any of these five models.
We measured naturalness with TTSDS2, which compares the distribution of a set of synthesized utterances against a set of real human recordings, rather than scoring each utterance one at a time, so it’s less language-sensitive than per-utterance scoring methods. For the human reference, we used 120 utterances per language from Google FLEURS’ validation set.
How comparisons like this are usually done
If you want to reproduce these results or benchmark a different model yourself, here’s a rundown of the measurement conventions this field generally uses.
Speed is measured as RTF (real-time factor): generation time divided by the length of the synthesized audio. Below 1 means faster than real time, and streaming services usually track time-to-first-byte (TTFB) alongside it. Our measurement here is sentence-level batch generation.
Intelligibility is measured through transcription: run the synthesized audio back through a speech recognition model and compare against the source text. For languages with clear word boundaries like English, word error rate (WER) is standard; for languages like Korean, Chinese, and Japanese without that boundary, character error rate (CER) is used instead. Whisper large-v3 has become the de facto scoring model in this field, and we followed that convention. ⛔ Don’t stop at the median, though. Here too, the median is mostly zero, and the real spread shows up in the 90th percentile.
Naturalness splits into two approaches. One scores each utterance individually with an MOS-prediction model (the UTMOS family); the other compares the entire distribution of the synthesized set against a set of real human speech (TTSDS2). The former is trained mostly on English and produces uncalibrated scores in other languages. Multilingual comparisons need the latter, so we made TTSDS2 our primary metric, and we looked not just at the overall score but at the speaker, prosody, and intelligibility sub-axes together. Looking only at the overall score would have missed the point of this whole post.
Emotion still lacks a solid standard. There’s no single widely accepted metric, so we combined two. Prosody variance measures expressive range, and a speech-emotion recognition model measures hit rate. You have to establish a floor first. Measure a model with no emotion control alongside the rest and you get the value of “what it looks like when the condition never applied,” and every other number only means something read as a multiple of that floor. In our case, that floor came out to 0.024 and 0.167.
There’s one rule that ties it all together: use the same sentences, the same seed, and the same hardware across every model. Different sentence sets make results incomparable even under the same seed number, and that’s exactly why we excluded some measurements from the comparison this time.
What to use, per language, per use case
Adding the intended use case into the mix gives you this:
| Use case | Korean | English | Chinese | Japanese |
|---|---|---|---|---|
| Real-time conversation | VoxCPM2 + number preprocessing | Kokoro-82M (CPU) | VoxCPM2 | VoxCPM2 |
| Emotionally expressive dialogue | Qwen3-TTS | Qwen3-TTS | Qwen3-TTS | Qwen3-TTS |
| Prompts & notifications | Supertonic-3 | Kokoro-82M | Qwen3-TTS | Supertonic-3 |
| Audiobooks & narration | Supertonic-3 | Any of them | Qwen3-TTS | Supertonic-3 |
| All four languages, one model | Chatterbox-ML | Chatterbox-ML | Chatterbox-ML | Chatterbox-ML |
| Amounts & code readout | Preprocessing required | Preprocessing required | Preprocessing required | Preprocessing + review |
The answer changes even within the same language once the use case changes. Real-time conversation prioritizes latency over quality, so it goes to whichever model has the lowest RTF; pre-rendered announcement audio has the opposite constraint, more time to spend, so it goes to the one with the highest intelligibility. Whenever emotion is actually needed, Qwen3-TTS is the only option. It costs you real-time performance, but it’s the only model where the requested emotion actually comes through.
Chatterbox-ML is alone on that second-to-last row because it is the only model that covers all four languages while staying under real-time at RTF 0.675. Do not let the median reassure you, though. Its median error rate is a respectable 0.068 in Korean and 0.065 in Chinese, but the worst decile in Chinese blows out to 0.844. Roughly one sentence in ten comes back hard to follow, so if it is going into an unattended pipeline, pair it with output validation.
Since the best choice differs per language, a thin routing layer keyed by language lets you pull English traffic onto CPU while still using the strongest model in each language. If operational simplicity matters more to you, covering all four with Chatterbox-ML and adding review is the cheaper thing to maintain.
Limitations worth knowing about
FLEURS is read-speech. The utterances are recorded as clean, deliberate readings, so this naturalness score is accurate as a measure of how well a model produces read-style speech, not conversational speech. If your target is a conversational agent, it’s worth re-measuring against a dialogue corpus instead.
Don’t trust the power numbers from the two models we ran on CPU. Running the identical configuration three times back to back, net incremental power swung by 178 percent. That’s a shared-node idle-baseline problem; the speed measurements from those same runs only moved by 7.9 percent, so the speed comparisons still hold.
Finally, only five of twelve candidate models made it into this post. Most of the rest were voice-cloning models with no default speaker, requiring a reference audio clip to run at all. The moment you feed a model a reference clip, what you’re measuring shifts from speech synthesis quality to cloning fidelity, so we didn’t mix them into the same table. That’s a separate comparison for another post.
All 61 samples here are the actual synthesized output from this measurement run, converted straight from the files the ledger points to, with no post-processing or cherry-picking.