Update README
#9
by zeroweightai - opened
README.md
CHANGED
|
@@ -96,8 +96,8 @@ model-index:
|
|
| 96 |
|
| 97 |
### Vietnamese Zero-Shot Text-to-Speech (TTS) with real-time streaming and voice cloning from seconds of audio. Fast, natural, and optimised for CPU inference.
|
| 98 |
|
| 99 |
-
**The most accurate open Vietnamese TTS we know of —
|
| 100 |
-
the next
|
| 101 |
|
| 102 |
* 🎯 **Ultra-natural** — 2.91 UTMOS, ~0.5 MOS above every other open Vietnamese
|
| 103 |
system, with near-zero dead air (0.029 s vs 0.23–0.53 s).
|
|
@@ -107,7 +107,7 @@ the next open model**, and it runs faster than real time on a laptop CPU.
|
|
| 107 |
* ⚡ **Real-time on CPU, streaming** — ~2× faster than real time (RTF 0.5×),
|
| 108 |
first audio chunk in ~70 ms. No GPU required.
|
| 109 |
* 🇻🇳 **Built for Vietnamese** — tones, code-switched English, and a built-in
|
| 110 |
-
normalizer that reads `31/12/2025` and `
|
| 111 |
|
| 112 |
* Code, examples, browser demo: **https://github.com/zeroweight-ai/ZeroTTS**
|
| 113 |
* Benchmark dataset: **https://huggingface.co/datasets/zeroweight-ai/ZeroBench-TTS**
|
|
@@ -127,8 +127,33 @@ tts.save_audio(audio, "out.wav")
|
|
| 127 |
Streaming, with first audio in roughly 70 ms:
|
| 128 |
|
| 129 |
```python
|
| 130 |
-
|
| 131 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 132 |
```
|
| 133 |
|
| 134 |
## Benchmarks
|
|
|
|
| 96 |
|
| 97 |
### Vietnamese Zero-Shot Text-to-Speech (TTS) with real-time streaming and voice cloning from seconds of audio. Fast, natural, and optimised for CPU inference.
|
| 98 |
|
| 99 |
+
**The most accurate open Vietnamese TTS we know of — 4× fewer word errors than
|
| 100 |
+
the next best model**, and it runs faster than real time on a laptop CPU.
|
| 101 |
|
| 102 |
* 🎯 **Ultra-natural** — 2.91 UTMOS, ~0.5 MOS above every other open Vietnamese
|
| 103 |
system, with near-zero dead air (0.029 s vs 0.23–0.53 s).
|
|
|
|
| 107 |
* ⚡ **Real-time on CPU, streaming** — ~2× faster than real time (RTF 0.5×),
|
| 108 |
first audio chunk in ~70 ms. No GPU required.
|
| 109 |
* 🇻🇳 **Built for Vietnamese** — tones, code-switched English, and a built-in
|
| 110 |
+
normalizer that reads `31/12/2025` and `ZeroTTS` the way a person would.
|
| 111 |
|
| 112 |
* Code, examples, browser demo: **https://github.com/zeroweight-ai/ZeroTTS**
|
| 113 |
* Benchmark dataset: **https://huggingface.co/datasets/zeroweight-ai/ZeroBench-TTS**
|
|
|
|
| 127 |
Streaming, with first audio in roughly 70 ms:
|
| 128 |
|
| 129 |
```python
|
| 130 |
+
import queue
|
| 131 |
+
|
| 132 |
+
import numpy as np
|
| 133 |
+
import sounddevice as sd # pip install sounddevice
|
| 134 |
+
|
| 135 |
+
TEXT = ("Đây là chế độ phát trực tuyến. Âm thanh được tạo ra và phát ngay lập tức, "
|
| 136 |
+
"không cần chờ toàn bộ đoạn văn hoàn thành. Nhờ vậy, người nghe chỉ mất "
|
| 137 |
+
"khoảng 70 mili giây là đã nghe thấy câu đầu tiên, ngay cả khi mô "
|
| 138 |
+
"hình đang chạy trên CPU của một chiếc laptop bình thường.")
|
| 139 |
+
|
| 140 |
+
pending, tail = queue.Queue(), np.zeros(0, dtype="float32")
|
| 141 |
+
|
| 142 |
+
def feed(outdata, frames, _time, _status):
|
| 143 |
+
global tail
|
| 144 |
+
while len(tail) < frames and not pending.empty():
|
| 145 |
+
tail = np.concatenate([tail, pending.get_nowait()])
|
| 146 |
+
n = min(frames, len(tail))
|
| 147 |
+
outdata[:n, 0] = tail[:n]
|
| 148 |
+
outdata[n:] = 0
|
| 149 |
+
tail = tail[n:]
|
| 150 |
+
|
| 151 |
+
with sd.OutputStream(samplerate=tts.sample_rate, channels=1,
|
| 152 |
+
dtype="float32", callback=feed):
|
| 153 |
+
for chunk in tts.synthesize_stream(TEXT, voice="maichi"):
|
| 154 |
+
pending.put(chunk.reshape(-1)) # chunk is (1, n) float32 at 48 kHz
|
| 155 |
+
while not pending.empty() or len(tail):
|
| 156 |
+
sd.sleep(50) # let the buffer drain before closing
|
| 157 |
```
|
| 158 |
|
| 159 |
## Benchmarks
|