Spaces:
Sleeping
Sleeping
A newer version of the Gradio SDK is available:
6.8.0
metadata
title: Viterbox TTS
emoji: 🎙️
colorFrom: indigo
colorTo: gray
sdk: gradio
sdk_version: 5.44.1
python_version: '3.10'
app_file: app.py
pinned: false
license: cc-by-nc-4.0
short_description: Vietnamese Text-to-Speech with Voice Cloning
🎙️ Viterbox
Vietnamese Text-to-Speech với Voice Cloning
Viterbox là mô hình Text-to-Speech tiếng Việt chất lượng cao, được fine-tune từ Chatterbox trên 3000+ giờ dữ liệu tiếng Việt.
🌟 Điểm nổi bật
| Tính năng | Mô tả |
|---|---|
| 🇻🇳 Tiếng Việt tự nhiên | Phát âm chuẩn, ngữ điệu tự nhiên, hỗ trợ đầy đủ dấu thanh |
| 🎯 Zero-shot Voice Cloning | Clone giọng nói chỉ với 3-10 giây audio mẫu |
| 🌍 Đa ngôn ngữ | Hỗ trợ tiếng Việt và 23 ngôn ngữ khác từ Chatterbox |
| ⚡ Inference nhanh | Tối ưu cho GPU với mixed precision (FP16) |
| 🎨 Giao diện đẹp | Web UI với Gradio, dễ sử dụng |
| 📝 Xử lý văn bản dài | Tự động chia câu, ghép audio với crossfade |
📊 Thông tin Model
Kiến trúc
Viterbox được xây dựng trên kiến trúc Chatterbox của Resemble AI:
- T3 (Text-to-Token): Transformer 520M tham số, chuyển văn bản thành speech tokens
- S3Gen (Token-to-Speech): Flow-matching vocoder, chuyển tokens thành waveform
- Voice Encoder: Trích xuất speaker embedding từ audio mẫu
Dữ liệu huấn luyện
Model được fine-tune trên 3000+ giờ dữ liệu tiếng Việt chất lượng cao:
| Dataset | Mô tả | Thời lượng |
|---|---|---|
| ViVoice | Dữ liệu giọng đọc đa dạng | ~1000h |
| PhoAudiobook | Sách nói tiếng Việt | ~1000h |
| Dolly-Audio | Dữ liệu nội bộ, đa giọng | ~1000h |
Base Model
- Chatterbox Multilingual: Pretrained trên 23 ngôn ngữ
- Vocabulary: Mở rộng thêm 1845 tokens cho tiếng Việt (tổng 2549 tokens)
📦 Cài đặt
Yêu cầu hệ thống
- Python: 3.10+
- CUDA: 11.8+ (khuyến nghị)
- RAM: 8GB+
- VRAM: 6GB+ (GPU)
Cài đặt từ source
# Clone repo
git clone https://github.com/iamdinhthuan/viterbox-tts.git
cd viterbox
# Tạo virtual environment (khuyến nghị)
python -m venv venv
source venv/bin/activate # Linux/Mac
# hoặc: venv\Scripts\activate # Windows
# Cài đặt dependencies
pip install -r requirements.txt
Cài đặt với pip
pip install -e .
🚀 Sử dụng
1. Giao diện Web (Gradio)
python app.py
Mở trình duyệt tại http://localhost:7860
📸 Screenshot
Giao diện web cho phép:
- Nhập văn bản cần đọc
- Chọn ngôn ngữ (Tiếng Việt / English)
- Upload hoặc chọn giọng mẫu
- Điều chỉnh các tham số
- Nghe và tải audio
2. Python API
from viterbox import Viterbox
# Load model (tự động download từ HuggingFace)
tts = Viterbox.from_pretrained("cuda")
# Tạo audio với giọng mặc định
audio = tts.generate("Xin chào, tôi là Viterbox!")
# Tạo audio với voice cloning
audio = tts.generate(
text="Xin chào, tôi là Viterbox!",
language="vi",
audio_prompt="path/to/reference.wav",
exaggeration=0.5,
cfg_weight=0.5,
temperature=0.8,
sentence_pause_ms=500,
)
# Lưu file
tts.save_audio(audio, "output.wav")
3. Command Line
# Tạo audio đơn giản
python inference.py --text "Xin chào ạ, em là trợ lý ảo của bạn, em có thể giúp gì cho anh ạ?" --output output.wav
# Với voice cloning và các tham số
python inference.py \
--text "Việt Nam là một đất nước xinh đẹp." \
--lang vi \
--ref reference.wav \
--exaggeration 0.5 \
--sentence-pause 0.5 \
--output output.wav
🎛️ Tham số
| Tham số | Mô tả | Giá trị | Mặc định |
|---|---|---|---|
text |
Văn bản cần đọc | string | (bắt buộc) |
language |
Mã ngôn ngữ | "vi", "en" |
"vi" |
audio_prompt |
Audio mẫu cho voice cloning | path/tensor | None |
exaggeration |
Mức độ biểu cảm | 0.0 - 2.0 | 0.5 |
cfg_weight |
Độ bám sát giọng mẫu | 0.0 - 1.0 | 0.5 |
temperature |
Độ ngẫu nhiên/sáng tạo | 0.1 - 1.0 | 0.8 |
top_p |
Top-p sampling | 0.0 - 1.0 | 0.9 |
repetition_penalty |
Phạt lặp từ | 1.0 - 2.0 | 1.2 |
sentence_pause_ms |
Thời gian ngắt giữa câu | 0 - 2000 | 500 |
crossfade_ms |
Thời gian crossfade | 0 - 100 | 50 |
Giải thích tham số
- exaggeration: Tăng để giọng biểu cảm hơn, giảm để giọng trầm tĩnh hơn
- cfg_weight: Tăng để giọng giống mẫu hơn, giảm để tự nhiên hơn
- temperature: Tăng để giọng đa dạng hơn, giảm để ổn định hơn
- sentence_pause_ms: Thời gian nghỉ giữa các câu (hữu ích cho văn bản dài)
📁 Cấu trúc dự án
viterbox/
├── app.py # Gradio Web UI
├── inference.py # CLI inference script
├── requirements.txt # Dependencies
├── pyproject.toml # Package config
├── README.md
├── wavs/ # Thư mục chứa giọng mẫu
│ └── *.wav
└── viterbox/ # Core library
├── __init__.py
├── tts.py # Main Viterbox class
└── models/ # Model components
├── t3/ # T3 Text-to-Token model
├── s3gen/ # S3Gen vocoder
├── s3tokenizer/ # Speech tokenizer
├── voice_encoder/ # Speaker encoder
└── tokenizers/ # Text tokenizer
🔧 Model Files
Model được host trên HuggingFace Hub: dolly-vn/viterbox
| File | Mô tả | Kích thước |
|---|---|---|
t3_ml24ls_v2.safetensors |
T3 model (fine-tuned) | ~2GB |
s3gen.pt |
S3Gen vocoder | ~1GB |
ve.pt |
Voice Encoder | ~20MB |
tokenizer_vi_expanded.json |
Tokenizer với vocab tiếng Việt | ~50KB |
conds.pt |
Default voice conditioning | ~1MB |
📝 Ví dụ
Đọc văn bản dài
text = """
Việt Nam là một quốc gia nằm ở phía đông bán đảo Đông Dương.
Đất nước có hình chữ S với chiều dài hơn 1600 km.
Thủ đô Hà Nội là trung tâm chính trị và văn hóa của cả nước.
"""
audio = tts.generate(
text=text,
language="vi",
sentence_pause_ms=600, # Nghỉ 0.6s giữa các câu
)
tts.save_audio(audio, "vietnam.wav")
Voice cloning
# Clone giọng từ file WAV (3-10 giây)
audio = tts.generate(
text="Xin chào, tôi có thể nói bằng giọng của bạn!",
audio_prompt="my_voice.wav",
exaggeration=0.3, # Giọng tự nhiên
cfg_weight=0.7, # Bám sát giọng mẫu
)
⚠️ Lưu ý
- Audio mẫu: Nên sử dụng audio sạch, không nhiễu, 3-10 giây
- VRAM: Model cần ~6GB VRAM, nếu không đủ có thể dùng CPU (chậm hơn)
- Văn bản: Hỗ trợ tốt nhất với văn bản có dấu đầy đủ
🙏 Credits
- Base Model: Chatterbox by Resemble AI
- Datasets: ViVoice, PhoAudiobook, Dolly-Audio
- Fine-tuning: Dolly VN - Speech Team @ ContextBoxAI
📄 License
CC BY-NC 4.0 (Creative Commons Attribution-NonCommercial 4.0)
- ✅ Được sử dụng cho mục đích phi thương mại
- ✅ Được chia sẻ, sửa đổi với ghi nguồn
- ❌ KHÔNG được sử dụng cho mục đích thương mại
Liên hệ thương mại: contextbox.ai
Made with ❤️ by Dolly VN @ ContextBoxAI