Torongo-TTS-AS

Torongo-TTS-AS is a single-speaker Assamese (as) text-to-speech (TTS) model that synthesises written Assamese into a natural, expressive female voice.

The model is based on the VITS architecture and is lightweight (~36M parameters), running comfortably on a consumer grade CPU and mobile device. It performs end to end synthesis, mapping input text directly to a 16 kHz waveform, and ships with a built in Assamese text normaliser that speaks numbers, dates, English words, and symbols the way a person naturally would.

Torongo-TTS-AS is available in the 🤗 Transformers library and can be loaded directly with VitsModel.

👉 Try it live: Interactive demo on Hugging Face Spaces

Model architecture details

VITS (Variational Inference with adversarial learning for end to end Text-to-Speech) is an end to end speech synthesis model that predicts a speech waveform conditional on an input text sequence. It is a conditional variational autoencoder (VAE) comprised of a posterior encoder, a decoder, and a conditional prior. A stochastic duration predictor allows the model to synthesise speech with different rhythms from the same input text, making generation non deterministic.

Architecture VITS
Training dataset ananddey/assamese-single-fem-dataset
Parameters ~36 M
Sampling rate 16 000 Hz
Language Assamese (asm)
Tokenizer VitsTokenizer
Speaking rate 1.0 (adjustable at inference time)
Framework 🤗 Transformers ≥ 4.36.2, PyTorch

Generated samples

Listen to the samples below, or try your own text in the live demo.

Sample Text Audio
Greeting আদৰণি জনাইছোঁ। তৰংগৰ জগতখনলৈ আপোনাক স্বাগতম।
Numbers & date আজি ২০২৬ চনৰ ৫ জুলাই। বতৰটো আজি বৰ ধুনীয়া হৈছে।
Poetic বতাহত ভাঁহি আহে পুৱাৰ কোমল গান, দূৰ আকাশত জ্বলি উঠে সোনালী অভিমান।
Informative অসম ভাৰতৰ উত্তৰ-পূৱ অঞ্চলত অৱস্থিত এখন ৰাজ্য। ইয়াৰ ৰাজধানী দিছপুৰ।
Everyday আজি বহুত দিনৰ মূৰত ঘৰলৈ আহি মাৰ হাতৰ ৰন্ধা খাই বৰ ভাল লাগিল।

Quick start

Python API

Step 1 — Create a project folder

mkdir torongo-tts && cd torongo-tts

Step 2 — Install dependencies

pip install "transformers>=4.36.2" huggingface_hub torch numpy scipy

Step 3 — Download the text normaliser

assamese_normalizer.py is not part of the model weights, so download it once:

huggingface-cli download ananddey/torongo-tts-as assamese_normalizer.py --local-dir .

Step 4 — Generate speech

Run from the folder containing assamese_normalizer.py:

import numpy as np
import scipy.io.wavfile
from transformers import pipeline

from assamese_normalizer import normalize_assamese_text

pipe = pipeline("text-to-speech", model="ananddey/torongo-tts-as")

text = normalize_assamese_text("আজি ২০২৬ চনৰ ৫ জুলাই।")
speech = pipe(text)

int16 = np.clip(speech["audio"].squeeze() * 32767.0, -32768.0, 32767.0).astype(np.int16)
scipy.io.wavfile.write("output.wav", rate=speech["sampling_rate"], data=int16)

Or use VitsModel :

import numpy as np
import scipy.io.wavfile
import torch
from transformers import AutoTokenizer, VitsModel

from assamese_normalizer import normalize_assamese_text

model = VitsModel.from_pretrained("ananddey/torongo-tts-as")
tokenizer = AutoTokenizer.from_pretrained("ananddey/torongo-tts-as")
model.eval()

model.config.speaking_rate = 0.9  # optional speaking rate: < 1.0 = slower

text = normalize_assamese_text("নমস্কাৰ, আপোনাৰ দিনটো শুভ হওক।")
inputs = tokenizer(text, return_tensors="pt")

with torch.no_grad():
    outputs = model(**inputs)

waveform = outputs.waveform.squeeze().numpy()
int16 = np.clip(waveform * 32767.0, -32768.0, 32767.0).astype(np.int16)
scipy.io.wavfile.write("output.wav", rate=model.config.sampling_rate, data=int16)

CLI: inference.py

A command line alternative option for audio generation.

Step 1 — Create a project folder

mkdir torongo-tts && cd torongo-tts

Step 2 — Install dependencies

pip install "transformers>=4.36.2" huggingface_hub torch numpy scipy

Step 3 — Download the scripts

huggingface-cli download ananddey/torongo-tts-as inference.py assamese_normalizer.py --local-dir .

Step 4 — Run

python inference.py --text "নমস্কাৰ, আপোনাৰ দিনটো শুভ হওক।" --out output.wav

Flags: --speed 0.9 (slower), --no-norm (skip normalisation).

Training

The model was trained on the ananddey/assamese-single-fem-dataset.

Setting Value
Training samples ~10 049 (re-split from the 11.3 k dataset)
Validation samples 1 500
Batch size 32
Epochs 80
Learning rate 2e-5
LR schedule ExponentialLR
Mixed precision bf16
Mel loss weight 35
Discriminator loss weight 3
Duration loss weight 1
KL loss weight 1.5

The discriminator weights used during training were removed from the final checkpoint so it loads cleanly with VitsModel for inference.

Training curves

Validation mel loss steadily decreased over training, and the train/validation curves track closely, indicating stable convergence without overfitting.

Validation mel loss

Train vs validation mel loss

Limitations

  • Single speaker: The model produces only one female voice. It cannot generate male voices or switch between speakers.
  • 16 kHz only: The model was trained and runs at 16 000 Hz. It does not support higher sample rates.
  • Assamese only: Trained exclusively on Assamese text. Other languages will produce unintelligible output.
  • Short utterances: Works best on sentence-length text.
  • No emotional control: The model always produces a neutral reading style. There is no mechanism to control prosody, emotion or emphasis.

License

This model is released under CC BY-NC 4.0.

Model card author

Developed by Anand Dey (@ananddey, ananddey.nic@gmail.com).

Citation

If you use this model, please cite the dataset:

@dataset{dey2026assamesesinglefem,
  title      = {Assamese Single Female TTS Dataset},
  author     = {Anand Dey},
  year       = {2026},
  publisher  = {Hugging Face},
  url        = {https://huggingface.co/datasets/ananddey/assamese-single-fem-dataset},
}
Downloads last month
-
Safetensors
Model size
36.3M params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Dataset used to train ananddey/torongo-tts-as

Space using ananddey/torongo-tts-as 1