Ninada (निनाद) v5.0.1 - In-Browser Text-to-Speech Specialists (Indian English + 11 Indian Languages)
Ninada (Nināda - Sanskrit निनाद, deep resonant sound) v5.0.1 is a 24,000 Hz In-Browser & Multi-Runtime Neural Text-to-Speech suite (~27.9 MB active W8A32+FP16 ONNX per specialist, 373.0 ms native CPU median TTFA, 0.195x RTF) featuring 12 dedicated Studio Male + 12 dedicated Studio Female specialists (24 models total) across Classical Sanskrit (sa), Indian English (en), Hindi (hi), Kannada (kn), Marathi (mr), Bengali (bn), Tamil (ta), Telugu (te), Malayalam (ml), Gujarati (gu), Punjabi (pa), and Odia (or) - fine-tuned end-to-end on Cloud GPU from IISc SPIRE Lab SYSPIN VITS donors onto single-speaker 24,000 Hz studio recordings (ai4bharat/Rasa + SPRINGLab/IndicTTS-English).
Architecture & Native Dataset-Matched Training
- Zero Cross-Language Accent Bleed (
24 Dedicated Specialists): Every language (sa, en, kn, hi, mr, bn, ta, te, ml, gu, pa, or) has dedicated Male (onnx/{lang}.onnx) and Female (onnx/{lang}_female.onnx) 24,000 Hz StudioVitsModel checkpoints (RelativePositionTransformer + StochasticDurationPredictor Rational-Quadratic Spline + ResidualCouplingBlock normalizing flow + HiFi-GAN v1 [8, 8, 2, 2] upsampling generator, HOP_LENGTH = 256) trained strictly on that language's own native single-speaker 24 kHz studio recordings (27600 studio training clips).
- 100% Native Script Orthography (
vocabs.json):
sa (144 Devanagari tokens), en (102 Latin tokens), kn (85 Kannada tokens), hi (120 Devanagari tokens), mr (144 Devanagari tokens including ळ/ऱ), bn (100 Bengali tokens including ৎ/ড়/ঢ়), ta (61 Tamil tokens including ழ/ற/ன), te (110 Telugu tokens), ml (101 Malayalam tokens including atomic chillus ൺ ൻ ർ ൽ ൾ ൿ), gu (124 Gujarati tokens), pa (85 Gurmukhi tokens including ੰ/ੱ via -0x0100 Brahmic isomorphism), and or (94 Odia tokens including ଡ଼/ଢ଼/ୟ via -0x0180 Brahmic isomorphism).
~27.9 MB Browser W8A32+FP16 ONNX + Sub-Clause Latent Streaming: Each specialist exports to ~27.9 MB (0.58 dB deterministic MCD parity vs PyTorch FP32), splits dynamically in-browser at the latent tensor boundary for sub-clause HiFi-GAN window streaming, and persists in CacheStorage + IndexedDB with 0 AudioWorklet underruns.
Held-Out 24 kHz Studio Test Leaderboard (N = 480 Utterances; B = 1,000 Bootstrap 95% CIs)
Per-Language Held-Out Studio MCD 0–8 kHz (dB, ↓)
24 kHz Streaming Quickstart
import ninada from 'ninada';
import { detectDevice } from 'webml-kit';
const { backend } = await detectDevice();
const voice = await ninada('gnumanth/ninada', {
lang: 'en',
voice: 'female',
device: backend,
});
for await (const chunk of voice.stream('Welcome to Ninada, streaming twenty-four kilohertz studio speech in real time.')) {
playPcm24k(chunk.pcm, chunk.sampleRate);
}
from ninada import Ninada
tts = Ninada(lang="mr", voice="female")
for chunk in tts.stream("नमस्कार, निनाद मराठी ध्वनी संश्लेषण प्रणालीमध्ये आपले स्वागत आहे."):
play(chunk["pcm"], chunk["sample_rate"]) # 24,000 Hz float32 PCM