File size: 8,956 Bytes
9617cfd 58510a9 0517c26 58510a9 9617cfd e890a4e 025a56f e890a4e 9617cfd dc0aa61 c990515 9617cfd 588c5e3 9617cfd 025a56f 9617cfd 588c5e3 dc0aa61 588c5e3 dc0aa61 9617cfd 025a56f dc0aa61 9617cfd 588c5e3 9617cfd 626ef08 9617cfd dc0aa61 025a56f | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 | ---
license: mit
language:
- bn
base_model: ResembleAI/chatterbox
tags:
- text-to-speech
- tts
- bengali
- bangla
- chatterbox
- fine-tuned
- zero-shot-tts
- speech
- speech-synthesis
datasets:
- ai4bharat/Shrutilipi
- ai4bharat/Rasa
- SPRINGLab/IndicTTS_Bengali
---
# ChatterBox Bangla
A fine-tuned version of [ResembleAI/chatterbox](https://huggingface.co/ResembleAI/chatterbox) for **Bengali (Bangla)** text-to-speech synthesis.
## Zerohot TTS Output
| Original| Output| Text|
|--|--|--|
|<audio controls src="https://huggingface.co/BosonLab/chatterbox-bangla/resolve/main/audios/refs/001.wav" style="width: 100px;"></audio>|<audio controls src="https://huggingface.co/BosonLab/chatterbox-bangla/resolve/main/audios/output/001.wav" style="width: 100px;"></audio>|এই শোন শোন, আজকে স্কুলে কী হয়েছে জানিস? — না তুই জানিস না, তুই তো ছিলিসই না! তো দীপু স্যারের ক্লাসে — আরে দীপু স্যার মানে অঙ্কের স্যার, চেনিস না? যার নাক দিয়ে শোঁ শোঁ শব্দ হয়! তো স্যার বোর্ডে লিখছেন, আর পিছন থেকে রাহুল|
|<audio controls src="https://huggingface.co/BosonLab/chatterbox-bangla/resolve/main/audios/refs/002.mp3" style="width: 100px;"></audio>|<audio controls src="https://huggingface.co/BosonLab/chatterbox-bangla/resolve/main/audios/output/002.wav" style="width: 100px;"></audio>|আচ্ছা আমি তোকে একটা জিনিস বলব — আরে থাম থাম, আগে ফোনটা রাখ! হ্যাঁ তো, তো সেদিন আমি বাজার থেকে ফিরছিলাম — না না, এটা সেই বাজার না, ওই যে নতুন যেটা খুলেছে|
|<audio controls src="https://huggingface.co/BosonLab/chatterbox-bangla/resolve/main/audios/refs/003.wav" style="width: 100px;"></audio>|<audio controls src="https://huggingface.co/BosonLab/chatterbox-bangla/resolve/main/audios/output/003.wav" style="width: 100px;"></audio>|শোন, Morty ফুচকার মধ্যে যে আলু থাকে, সেই আলু একসময় মাটির নিচে অন্ধকারে বড় হয়েছে। কোনো আশা নেই, কোনো স্বপ্ন নেই, শুধু মাটি আর অন্ধকার। আর তারপরেও সে টিকে থেকেছে। তুই সেই আলুর চেয়েও কম resilient, এইটা বুঝলি?|
|<audio controls src="https://huggingface.co/BosonLab/chatterbox-bangla/resolve/main/audios/refs/004.webm" style="width: 100px;"></audio>|<audio controls src="https://huggingface.co/BosonLab/chatterbox-bangla/resolve/main/audios/output/004.wav" style="width: 100px;"></audio>|আমরা কেউ মাষ্টার হতে চেয়েছিলাম, কেউ ডাক্তার, কেউ উকিল। অমলকান্তি সে-সব কিছু হতে চায়নি। সে রোদ্দুর হতে চেয়েছিল! ক্ষান্তবর্ষণ কাক-ডাকা বিকেলের সেই লাজুক রোদ্দুর, জাম আর জামরুলের পাতায় যা নাকি অল্প-একটু হাসির মতন লেগে থাকে।|
|<audio controls src="https://huggingface.co/BosonLab/chatterbox-bangla/resolve/main/audios/refs/005.wav" style="width: 100px;"></audio>|<audio controls src="https://huggingface.co/BosonLab/chatterbox-bangla/resolve/main/audios/output/005.wav" style="width: 100px;"></audio>|শুরু থেকেই ঝড়ো ব্যাটিং উপহার দেন ভারতের ক্রিকেটারেরা। ওপেনার অভিষেক শর্মা এবং ইশান কিশান দুজনেই আলাদা ধাঁচের দুটি অর্ধশতক করেন, আর তাদের রান করার গতি ছিল অত্যন্ত fast.|
|<audio controls src="https://huggingface.co/BosonLab/chatterbox-bangla/resolve/main/audios/refs/006.wav" style="width: 100px;"></audio>|<audio controls src="https://huggingface.co/BosonLab/chatterbox-bangla/resolve/main/audios/output/006.wav" style="width: 100px;"></audio>|শুরু থেকেই ঝড়ো ব্যাটিং উপহার দেন ভারতের ক্রিকেটারেরা। ওপেনার অভিষেক শর্মা এবং ইশান কিশান দুজনেই আলাদা ধাঁচের দুটি অর্ধশতক করেন, আর তাদের রান করার গতি ছিল অত্যন্ত fast.|
|<audio controls src="https://huggingface.co/BosonLab/chatterbox-bangla/resolve/main/audios/refs/007.webm" style="width: 100px;"></audio>|<audio controls src="https://huggingface.co/BosonLab/chatterbox-bangla/resolve/main/audios/output/007.wav" style="width: 100px;"></audio>|আমরা কেউ মাষ্টার হতে চেয়েছিলাম, কেউ ডাক্তার, কেউ উকিল। অমলকান্তি সে-সব কিছু হতে চায়নি। সে রোদ্দুর হতে চেয়েছিল! ক্ষান্তবর্ষণ কাক-ডাকা বিকেলের সেই লাজুক রোদ্দুর, জাম আর জামরুলের পাতায় যা নাকি অল্প-একটু হাসির মতন লেগে থাকে।|
## Model Details
- **Base model**: ResembleAI/chatterbox — multilingual ChatterBox (supports 23 languages)
- **Fine-tuned on**: Bengali speech corpus (~99 hours, 58,820 samples)
- ai4bharat/Shrutilipi (Bengali split) — 17,882 samples, ~28h
- ai4bharat/Rasa (Bengali split) — 28,088 samples, ~51h
- SPRINGLab/IndicTTS_Bengali — 12,852 samples, ~20h
- **Training steps**: 20,000
- **Epochs**: ~10.6
- **Architecture**: T3 (Text-to-Token Transformer) + HiFT-GAN vocoder
- **Vocabulary**: Extended from 704 → 2,530 tokens to cover Bengali characters
## Requirements
```bash
git clone https://github.com/gokhaneraslan/chatterbox-finetuning
cd chatterbox-finetuning
pip install -r requirements.txt
```
### One-time patch (upstream vocab resize fix)
The upstream `chatterbox-finetuning` repo initialises T3 with a hard-coded 704-token vocabulary, which causes a size mismatch when loading this model (vocab=2530). Apply this one-line fix before running inference:
```bash
# Run from inside the cloned chatterbox-finetuning directory
python - <<'EOF'
import pathlib
f = pathlib.Path("src/chatterbox_/tts.py")
txt = f.read_text()
old = " t3 = T3()\n t3_state = load_file(ckpt_dir / \"t3_cfg.safetensors\")"
new = (
" t3_state = load_file(ckpt_dir / \"t3_cfg.safetensors\")\n"
" from .models.t3.modules.t3_config import T3Config\n"
" t3 = T3(hp=T3Config(text_tokens_dict_size=t3_state[\"text_emb.weight\"].shape[0]))"
)
f.write_text(txt.replace(old, new))
print("Patched tts.py")
EOF
```
## Usage
```python
import sys
sys.path.insert(0, "/path/to/chatterbox-finetuning")
from huggingface_hub import snapshot_download
from src.chatterbox_.tts import ChatterboxTTS
import torchaudio
model_dir = snapshot_download("BosonLab/chatterbox-bangla")
model = ChatterboxTTS.from_local(model_dir, device="cuda")
text = "আমি বাংলায় কথা বলতে পারি। এটি একটি পরীক্ষামূলক বাক্য।"
wav = model.generate(text)
torchaudio.save("output.wav", wav, model.sr)
```
## With Voice Cloning
```python
wav = model.generate(text, audio_prompt_path="reference.wav")
```
## Files
| File | Description |
|------|-------------|
| `t3_cfg.safetensors` | Fine-tuned T3 text-to-token transformer (Bengali, vocab=2530) |
| `s3gen.safetensors` | Speech codec decoder (unchanged from base) |
| `ve.safetensors` | Voice encoder (unchanged from base) |
| `conds.pt` | Conditioning embeddings (unchanged from base) |
| `tokenizer.json` | Tokenizer extended with Bengali characters |
## Training Data
All audio resampled to 16kHz. Text cleaned and normalized.
Datasets sourced from AI4Bharat and SPRINGLab public datasets.
## Limitations
- Optimized for Bengali; other languages may degrade
- Best results with clear, well-punctuated Bengali text
- Emotion control inherited from base ChatterBox multilingual model
- Requires chatterbox-finetuning kit due to extended Bengali vocabulary
|