trưởng công an xã chạy sang can ngăn cũng bị tuyến đánh tiếp
Clone a voice from a few seconds of audio, then speak seven languages in it — at 16.3× realtime on a single GPU. Everything below is the model's own output. Judge it with your ears.
Six held-out speakers from the VIVOS test set — voices no model saw in training. Every system got the same reference clip and the same sentence, on the same L4 GPU. The dashed cards are the anchors: what the model was given, and what the person actually sounds like. Playing one stops the others, so the comparison stays honest.
trưởng công an xã chạy sang can ngăn cũng bị tuyến đánh tiếp
cũng thuộc loại dày đặc nhất trong hệ mặt trời
bác vẫn chưa trả tiền cho tôi đây nhé
hoặc chỉ biểu hiện bằng các rối loạn co bóp
làm hỏng các thiết bị của tên lửa
lương ba cọc ba đồng thì nuôi được ai
The speaker embedding is language-agnostic: a single Vietnamese reference clip carries the same voice into English, Chinese, French, German, Japanese and Korean. Japanese input must be kana — the phonemizer reads kana correctly but drops kanji, so convert with a kanji→kana step first.
Xin chào, đây là giọng nói được nhân bản từ một đoạn ghi âm ngắn.
Hello, this is a cloned voice speaking English.
你好,这是一个克隆的声音。
Bonjour, ceci est une voix clonée.
Hallo, dies ist eine geklonte Stimme.
こんにちは、これはクローンされたこえです。
안녕하세요, 이것은 복제된 목소리입니다.
One NVIDIA L4, VIVOS test split, 10 held-out speakers × 3 sentences, identical references and sentences for every system. RTF is full-utterance compute ÷ audio duration — not time-to-first-audio, which is what most speed claims quote.
| System | RTF ↓ | ×realtime | SECS ↑ | UTMOSv2 ↑ | WER ↓ |
|---|---|---|---|---|---|
| Kokoro Ninja | 0.061 | 16.3× | 0.894 | 2.660 | 3.9% |
| omnivoice-vietnamese | 0.437 | 2.3× | 0.916 | 2.660 | 2.6% |
| VieNeu v3 Nano CPU | 0.468 | 2.1× | 0.912 | 2.320 | 6.2% |
| VieNeu v3 Turbo | 0.718 | 1.4× | 0.931 | 2.445 | 3.3% |
| Human recording | — | — | 0.914 | 3.019 | 5.7% |
SECS is scored with WavLM-base-plus-sv rather than CAMPPlus — scoring with the encoder this model is conditioned on would flatter it. WER is PhoWhisper back-transcription, which catches wrong tones, because a wrong tone is a different Vietnamese word. UTMOSv2 is English/Japanese-trained, so on Vietnamese it's a proxy; the human row is the calibration. It is also nondeterministic — rescoring identical audio moves it by up to 0.08, so treat small MOS gaps as noise. SECS and WER are exactly reproducible.
espeak-ng's Vietnamese voice collapses phonemically distinct onsets into a single IPA token. When two different sounds arrive as the same symbol, the model cannot learn the difference — it is not a tuning problem, the information is already gone.
| Written | espeak gives | Should be |
|---|---|---|
| tr | tʃ | ɴ |
| ch | tʃ | tʃ |
| s | s | ʂ |
| x | s | s |
| r | z | ʐ |
| d / gi | z | z |
We phonemize per syllable, look at the written onset and remap the colliding phoneme to the correct retroflex — which already exists in the vocabulary, so nothing about the model has to change. The remap is guarded: it only fires when espeak actually emitted the colliding token. c/k/q → k is left alone, because that one is a genuine merger in Vietnamese.
One practical quirk: the model is trained on sentence-final punctuation and is sensitive to it — text without a terminal mark tends to clip or run on at the end. synthesize() adds one when your text lacks it. On this very benchmark, adding the missing period moved WER from 5.1% to 3.9% and predicted MOS from 2.47 to 2.66.