Text-to-Speech
ONNX
Safetensors
Assamese
tts
assamese
speech-synthesis
on-device
cpu

Indic Tiny TTS: Assamese

A tiny Assamese text-to-speech model: 22.5 million parameters, a female and a male voice, reads Assamese script. On FLORES-200 news sentences it makes fewer recognition errors (3.1 % CER) than 4 other open Assamese models tested. It runs 38× faster than real time on one Apple M1 CPU thread and 7× on one x86 CPU thread, with PyTorch or ONNX Runtime; no GPU needed.

Part of the INDIC TINY TTS MODELS collection: 12 tiny open models, one per language, for 11 Indian languages and Indian English, with the datasets they were trained on.

Training data: sulabhkatiyar/indic-tts-mini-24k: the Assamese female and male voices of AI4Bharat Rasa, 24 kHz, derived from the full-resolution sulabhkatiyar/indic-tts-multilingual-prepared.

Other open Assamese models, same test

FLORES-200 news sentences (100)

Fewer recognition errors than these 4 open Assamese models; the same as one larger model.

Character error rate: this model and the other open Assamese models

Model Size CER, % Extra errors vs this model, points (95 % CI) Result
This model 22.5 M 3.07
ai4bharat/IndicF5 350.6 M 2.28 -0.79 [-1.20, -0.44] theirs better
ai4bharat/indic-parler-tts 937.8 M 3.82 +0.76 [-0.23, +2.06] same
ai4bharat/vits_rasa_13 31.3 M 4.15 +1.09 [+0.44, +1.72] ours better
facebook/mms-tts-asm 29.1 M 5.65 +2.58 [+1.93, +3.26] ours better
github.com/AI4Bharat/Indic-TTS (as.zip) 65.6 M 6.71 +3.65 [+2.91, +4.44] ours better
multilingual-tts/VITS-OpenBible-Assamese 29.1 M 6.89 +3.83 [+2.24, +6.05] ours better

Held-out test sentences (296)

Fewer recognition errors than these 2 open Assamese models.

Character error rate: this model and the other open Assamese models

Model Size CER, % Extra errors vs this model, points (95 % CI) Result
This model 22.5 M 5.93
github.com/AI4Bharat/Indic-TTS (as.zip) 65.6 M 10.46 +4.53 [+3.31, +5.80] ours better
facebook/mms-tts-asm 29.1 M 15.16 +9.23 [+7.41, +11.18] ours better
Also trained on same speaker voices:
ai4bharat/vits_rasa_13 31.3 M 6.69 +0.76 [-0.62, +2.03] same

Larger models, same held-out sentences

  • Same error rate as ai4bharat/indic-parler-tts at 1/42 the size, ~132× faster on T4
  • ~145× faster than ai4bharat/IndicF5 on T4

Character error rate: this model and the larger open Assamese models, on the same sentences

Model Size Sentences CER, % This model, same sentences, % Extra errors vs this model, points (95 % CI) Result
Also trained on same speaker voices:
ai4bharat/IndicF5 350.6 M 40 5.06 6.14 -1.08 [-2.60, -0.09] theirs better
ai4bharat/indic-parler-tts 937.8 M 40 6.24 6.14 +0.09 [-1.00, +1.34] same

CER = character error rate, lower is better; size = parameters. Method: see the Appendix.

Speed

Hardware Setting Faster than real time Real-time factor
x86 CPU (Kaggle notebook, Intel Xeon @ 2.20GHz, 4 vCPU) PyTorch, 1 thread 7× 0.136
Apple M1 laptop, CPU PyTorch, 1 thread 38× 0.026
NVIDIA T4 GPU PyTorch 62× 0.016

Real-time factor = total synthesis time ÷ total audio length over 30 held-out sentences (lower is faster).

Listen

Clips made by this model for sentences from the held-out evaluation set; never used in training.

Female voice (voice="female")

মই জানো, অইন বহু লোক আছে যিসকলে এইটোক ভয় কৰি আছে, কিন্তু এইটোৰ পৰা তেওঁলোকৰ কোনো উপকাৰ নহয়।
Transliteration: Mai jano, ain bahu lok achhe jisakale eitok bhay kari achhe, kintu eitor para teonlokar kono upakar nahay.
Translation (approx.): I know many other people are afraid of this, but it does them no good.

ই আমাক যিকোনো বস্তুৰ বিষয়ে এনেধৰণে জ্ঞান সাল-সলনি কৰিবলৈ অনুমতি দিয়ে যিবোৰ মুখেৰে প্ৰকাশ কৰা সম্ভৱ নহয়।
Transliteration: I amak jikono bastur bishaye enedharane gyan sal-salani karibalai anumati diye jibor mukhere prakash kara sambhav nahay.
Translation (approx.): It lets us exchange knowledge in this way about anything that cannot be put into words.

তুমি এনেকুৱা ব্যস্ত সময়ৰ মাজতো তোমাৰ চখ পূৰণ কৰিবলৈ কেনেদৰে সময় উলিওৱা?
Transliteration: Tumi enekuva byast samayar majato tomar chakh puran karibalai kenedare samay uliova?
Translation (approx.): How do you make time for your hobby in such a busy schedule?

বাৰু, আপুনি কিমান দৰমহা আশা কৰিছে?
Transliteration: Baru, apuni kiman daramaha asha karichhe?
Translation (approx.): Well, how much salary are you expecting?

Male voice (voice="male")

আমি আশা কৰিছোঁ আপোনাৰ যাত্ৰা সুন্দৰ হৈ উঠক।
Transliteration: Ami asha karichhon aponar jatra sundar hai uthak.
Translation (approx.): We hope your journey turns out lovely.

আমাক নিশ্চয়কৈ কিবা এটা পৰিৱর্তনৰ প্রয়োজন।
Transliteration: Amak nishchayakai kiba eta parivartanar prayojan.
Translation (approx.): We surely need some kind of change.

ইণ্টাৰমিডিয়েট আৰু ফাইনেল পৰীক্ষা বছৰত এবাৰহে হয়।
Transliteration: Intaramidiyet aru phainel pariksha bachharat ebarahe hay.
Translation (approx.): The intermediate and final exams happen only once a year.

আৰু শিক্ষকসকলো এই পদ্ধতিটোৰ লগত ইমান অভ্যস্ত নহয়।
Transliteration: Aru shikshakasakalo ei paddhatitor lagat iman abhyast nahay.
Translation (approx.): And the teachers are not that used to this method either.

If the players do not show, the files are in samples/.

Quick start

pip install torch numpy safetensors huggingface_hub
import sys
from huggingface_hub import snapshot_download

sys.path.insert(0, snapshot_download("sulabhkatiyar/indic-tiny-tts-assamese", ignore_patterns=["onnx/*"]))  # model + its small Python package
from indic_tiny_tts import TinyTTS

tts = TinyTTS.from_pretrained("sulabhkatiyar/indic-tiny-tts-assamese")  # uses the NVIDIA GPU if there is one, else the CPU
wav = tts.synthesize("নমস্কাৰ! আজি বতৰ বৰ ভাল।", voice="female")
tts.save_wav(wav, "hello.wav")

wav is a NumPy array of 24 kHz audio. voice is "female" or "male". Optional: speed=1.2 speaks faster, and seed=0 gives the same output every time.

Choose where it runs

tts = TinyTTS.from_pretrained("sulabhkatiyar/indic-tiny-tts-assamese", device="cpu")               # any computer
tts = TinyTTS.from_pretrained("sulabhkatiyar/indic-tiny-tts-assamese", device="cuda")              # NVIDIA GPU
tts = TinyTTS.from_pretrained("sulabhkatiyar/indic-tiny-tts-assamese", device="cpu", threads=1)    # Mac with Apple silicon (fastest there)

On a Mac, device="mps" (the Apple GPU) also works, but for a model this small the CPU with one thread is faster.

Without PyTorch (ONNX Runtime)

The onnx/ folder holds the same model as three ONNX graphs. This path needs only NumPy and ONNX Runtime:

pip install onnxruntime numpy huggingface_hub
import sys
from huggingface_hub import snapshot_download

folder = snapshot_download("sulabhkatiyar/indic-tiny-tts-assamese", ignore_patterns=["*.safetensors"])
sys.path.insert(0, folder)
from indic_tiny_tts import TinyTTSOnnx

tts = TinyTTSOnnx.from_pretrained(folder)
wav = tts.synthesize("নমস্কাৰ! আজি বতৰ বৰ ভাল।", voice="male")
tts.save_wav(wav, "hello.wav")

Install as a package (optional)

This adds an indic-tiny-tts command:

hf download sulabhkatiyar/indic-tiny-tts-assamese --local-dir indic-tiny-tts-assamese
pip install ./indic-tiny-tts-assamese
indic-tiny-tts "নমস্কাৰ! আজি বতৰ বৰ ভাল।" --model ./indic-tiny-tts-assamese --voice male -o hello.wav

Measure the speed

Inside the downloaded folder:

python -m indic_tiny_tts.latency --model . --device cpu --threads 1
python -m indic_tiny_tts.latency --model . --backend onnx --threads 4   # the ONNX version

Details

Language Assamese (Assamese script)
Voices female (Rasa, AI4Bharat), male (Rasa, AI4Bharat)
Audio 24 kHz, mono
Size 22.5 million parameters (about 90 MB per format: PyTorch or ONNX)
Runs on CPU (Windows, Linux, Mac), NVIDIA GPU (CUDA), Apple silicon
Needs Python 3.9+ and PyTorch, or ONNX Runtime. No eSpeak or other system packages.

How good is it?

On held-out sentences a speech recogniser misheard 5.93 % of this model's characters, close to the 4.80 % of the real recordings.

Good to know

  • Assamese script only. English words in Latin letters (hello) are skipped with a warning. Write them in Assamese script.
  • Numbers are read out in Assamese: 25 becomes পঁচিশ, 2024 becomes দুই হাজাৰ চৌবিশ and 3.5% becomes তিনি দশমিক পাঁচ শতাংশ. Currency (₹500) is not converted yet and is skipped, so write amounts in words. Times such as 10:30 and phone numbers are not read correctly yet, so write them out in words if that matters.
  • Long text is fine. It is split into sentences at ।, ?, ! and ., which are spoken one after another.
  • Style: a calm reading voice. The model learned from about 37 hours of recorded speech by two speakers.
  • Skipped or repeated words are more frequent than we aim for (1.7 % of sentences), and both voices can hold a sound a little long now and then. Our automatic checks flagged this.
  • Speaking rate: each voice has a default speed matched to its speaker on held-out data (length_scale in config.json: as_F 1.033, as_M 1.025). speed= scales it further.
  • Please use it responsibly. Do not use it to pass yourself off as the original speakers or to mislead people.

Training data and credits

  • Rasa dataset by AI4Bharat (ai4bharat/Rasa), licence CC-BY-4.0: the Assamese female (18.3 h) and male (18.4 h) speakers, the read, conversation and command recordings, leaving out the emotional ones. Our changes: audio resampled from 48 kHz to 24 kHz; clips shorter than 0.5 s or longer than 20 s left out; text normalised (for example, numbers written out in words); training clips that a speech recogniser could not match to their text (character error rate above 25 %, or a length mismatch) left out: 1.78 % of the female and 4.98 % of the male clips.
  • Prepared data: sulabhkatiyar/indic-tts-mini-24k (revision 8fe16c93).
  • Vocoder: Vocos, with the pretrained charactr/vocos-mel-24khz weights used unchanged (MIT licence; trained by its authors on LibriTTS).
  • Model design: based on Matcha-TTS (MIT licence). The acoustic model (8.9 million parameters) reads characters directly (no phonemiser) and was trained from scratch on the data above for 137,263 steps (batch 32, about 10 hours on one NVIDIA T4); the released weights are the averaged (EMA) weights at that step.
  • Number reading: word tables adapted from AI4Bharat's indic-numtowords (MIT licence).
  • Evaluation tools: AI4Bharat IndicConformer (speech recognition) and SpeechBrain ECAPA (speaker similarity).

Licence

  • Acoustic model weights (model.safetensors, onnx/text_encoder.onnx, onnx/flow_decoder.onnx): CC-BY-4.0. You may use them, also commercially, if you give credit to this model and to the training data (the Rasa dataset; see Citation and LICENSE.md).
  • Vocoder weights (vocoder.safetensors, onnx/vocoder.onnx): the unchanged pretrained Vocos weights, MIT licence by their authors.
  • Code (indic_tiny_tts/): MIT.
  • Details and third-party notices: LICENSE.md.

Citation

If you use this model, please cite it:

@misc{katiyar2026indictinyttsassamese,
  author       = {Sulabh Katiyar},
  title        = {Indic Tiny TTS: Assamese},
  year         = {2026},
  publisher    = {Hugging Face},
  howpublished = {\url{https://huggingface.co/sulabhkatiyar/indic-tiny-tts-assamese}}
}

Please also cite the data and the work it builds on:

@inproceedings{ai4bharat2024rasa,
  author    = {Praveen Srinivasa Varadhan and Ashwin Sankar and Giri Raju and Mitesh M. Khapra},
  title     = {{Rasa: Building Expressive Speech Synthesis Systems for Indian Languages in Low-resource Settings}},
  booktitle = {Proc. INTERSPEECH 2024},
  year      = {2024}
}

@inproceedings{mehta2024matcha,
  author    = {Shivam Mehta and Ruibo Tu and Jonas Beskow and {\'E}va Sz{\'e}kely and Gustav Eje Henter},
  title     = {{Matcha-TTS}: A fast {TTS} architecture with conditional flow matching},
  booktitle = {Proc. ICASSP 2024},
  year      = {2024}
}

@inproceedings{siuzdak2024vocos,
  author    = {Hubert Siuzdak},
  title     = {Vocos: Closing the gap between time-domain and Fourier-based neural vocoders for high-quality audio synthesis},
  booktitle = {Proc. ICLR 2024},
  year      = {2024}
}

Appendix: how we evaluated

Every model spoke the same text: 296 held-out test sentences from both voices, never used in training, and 100 FLORES-200 news sentences. A speech recognition model (AI4Bharat IndicConformer-600M) transcribed each clip, and the score is its character error rate (CER). A paired bootstrap 95 % confidence interval of the CER difference over the same sentences decides each result: better when the whole interval favours this model, the same when it includes zero, worse when it favours the other model. The larger models read the first 40 of the held-out sentences (20 per voice) unless the table shows a larger number, and all 100 FLORES-200 sentences.

Downloads last month
24
Safetensors
Model size
8.93M params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Datasets used to train sulabhkatiyar/indic-tiny-tts-assamese

Collection including sulabhkatiyar/indic-tiny-tts-assamese