Zio TTS v0 β Khmer text-to-speech
A small VITS model that speaks Khmer at 24 kHz. First research release of the Zio project (Khmer + English speech, open source).
Status: v0 / experimental. Single male voice, ~1 hour of training audio. Expect clear Khmer-like speech with occasional mispronunciations, not studio quality. English is not supported yet (v0 saw no English audio). No emotion control yet. No quantitative evaluation has been done; see Evaluation.
Samples: samples/ (generated by this exact checkpoint).
Get started
1. Python / CLI (recommended)
git clone https://github.com/sombochea/zio-tts && cd zio-tts
uv sync --extra tts # needs Python 3.12+ and ffmpeg
huggingface-cli download sombochea/zio-tts --local-dir zio-tts-v0
uv run zio speak "αα½ααααΈ ααΎα’ααααα»ααααααΆαααΆαα" hello.wav --run zio-tts-v0
Or from Python:
from zio.tts.infer import synthesize
synthesize("zio-tts-v0", "αααααααα’αΆααΆαααΆαα»ααα’ααΆαα", "out.wav")
Text is normalized (Khmer digits and α/$ become spoken words) and word-segmented automatically β the model was trained on word-spaced Khmer, so unsegmented text sounds worse.
2. ONNX (no PyTorch)
zio-tts.onnx + vocab.json are included.
pip install onnxruntime soundfile "zio @ git+https://github.com/sombochea/zio-tts"
python examples/onnx_infer.py zio-tts.onnx vocab.json "αα½ααααΈ" out.wav
Inputs: input (int64 token ids), input_lengths, scales = [noise 0.667, length 1.0, noise_dp 0.8]. Token ids = the vocab.json id of each character with blank_id between every character. Larger length scale = slower speech.
Model details
| Architecture | VITS (coqui-tts), graphemes (Khmer characters + aβz), no phonemizer |
| Sample rate | 24 kHz mono |
| Voice | 1 speaker (SLR42 speaker km_6753, male) |
| Training data | β863 utterances β 1 h of OpenSLR SLR42 (Google, CC BY-SA 4.0) |
| Training | A100 on Modal, resumed run, ~480 epochs in total (best checkpoint by eval loss) |
| Files | best_model.pth, config.json (coqui), zio-tts.onnx, vocab.json |
Why graphemes: espeak-ng has no Khmer voice, so no off-the-shelf G2P exists. A Khmer G2P is future work.
Limitations
- Khmer only; one voice; no emotion/style control; no voice cloning.
- ~1 h of data β mispronunciations, unstable prosody on long or rare words. Keep sentences short (< ~15 s).
- Numbers are read via simple rules up to 999,999,999; dates, units, abbreviations and mixed Khmer/English text are not handled.
- Not suitable for impersonating anyone. Please disclose that the speech is synthetic.
Evaluation
None yet: no MOS, no intelligibility CER. Treat quality claims as unverified until the project publishes numbers.
License & data
Released under CC BY-SA 4.0 because the training data (SLR42, Β© Google, CC BY-SA 4.0) is share-alike; this is a precaution, not legal advice. Code in the GitHub repo is Apache-2.0.
Citation / credits
Zio project (this repository); VITS (Kim et al., 2021); coqui-tts; OpenSLR SLR42 (Google).
Sample sentences
- αα½ααααΈ ααΎα’ααααα»ααααααΆαααΆαα β
samples/sample1.wav - αααααααα’αΆααΆαααΆαα»ααα’ααΆαα β
samples/sample2.wav - ααα αΌααααααααα α₯α α α α β
samples/sample3.wav - ααααα»ααΆααΆααααααααΆααααααααα·ααΆαααααααΌαααα β
samples/sample4.wav
- Downloads last month
- -