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