ninada / README.md
gnumanth's picture
Release Ninada v4.0: 12 Native 24,000 Hz Studio VITS Specialists (Male & Female W8A32+FP16 ONNX)
33d4a47 verified
|
Raw History Blame Contribute Delete
6.03 kB
metadata
language:
  - sa
  - hi
  - kn
  - ta
  - te
  - ml
license: mit
library_name: onnx
pipeline_tag: text-to-speech
datasets:
  - ai4bharat/Rasa
tags:
  - text-to-speech
  - streaming-tts
  - ninada
  - sanskrit
  - vedic
  - indic
  - kannada
  - tamil
  - telugu
  - malayalam
  - vits
  - hifi-gan
  - onnxruntime-web
  - wasm

Ninada (निनाद) v4.0 — 24,000 Hz Native Per-Language Studio VITS Specialists

Ninada (Nināda — Sanskrit निनाद, deep resonant sound) v4.0 is a 24,000 Hz Native Per-Language Studio Neural TTS suite (~27.9 MB active W8A32+FP16 ONNX per language, 372.7 ms native CPU median TTFA, 0.197x RTF) with 6 dedicated Studio Male + 6 dedicated Studio Female specialists (Sanskrit [sa], Kannada [kn], Hindi [hi], Tamil [ta], Telugu [te], Malayalam [ml]) trained end-to-end on each language's own native single-speaker 24,000 Hz studio recordings (ai4bharat/Rasa) and native Unicode script tokens.

Architecture & Native Dataset-Matched Training

  • Zero Cross-Language Accent Bleed: Every language (sa, kn, hi, ta, te, ml) has its own dedicated 24,000 Hz StudioVitsModel (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 ai4bharat/Rasa single-speaker 24 kHz studio recordings (13700 total studio training clips across Male & Female speakers).
  • 100% Native Script Orthography (vocabs.json):
    • kn: Native Kannada script (85 tokens) trained on ai4bharat/Rasa Kannada (SYSPIN/vits_Kannada_{Male,Female} frozen 500k-step TextEncoder + 24 kHz studio vocoder adaptation).
    • sa: Classical Sanskrit Devanagari (144 tokens including ऋ, ॠ, ऌ, ळ, ऽ, ः, ।, ॥, ॐ) trained exclusively on ai4bharat/Rasa Sanskrit (SYSPIN/vits_Marathi_{Male,Female} warm-start — zero Hindi dataset or Hindi voice sharing).
    • te: Native Telugu script (110 tokens) trained on ai4bharat/Rasa Telugu (SYSPIN/vits_Telugu_{Male,Female} warm-start).
    • hi: Native Hindi Devanagari (120 tokens) trained on ai4bharat/Rasa Hindi (SYSPIN/vits_Hindi_{Male,Female} warm-start).
    • ta: Native Tamil script (61 tokens including ழ, ற, ன) trained on ai4bharat/Rasa Tamil (SYSPIN/vits_Kannada_{Male,Female} Brahmic +0x0100 embedding isomorphism).
    • ml: Native Malayalam script (101 tokens including atomic chillus ൺ ൻ ർ ൽ ൾ ൿ) trained on ai4bharat/Rasa Malayalam (SYSPIN/vits_Kannada_{Male,Female} Brahmic -0x0080 embedding isomorphism).
  • ~27.9 MB Browser W8A32+FP16 ONNX + Offline CacheStorage: Each exported onnx/{sa,kn,hi,ta,te,ml}.onnx and onnx/{sa,kn,hi,ta,te,ml}_female.onnx is ~27.9 MB (0.61 dB deterministic MCD parity vs PyTorch FP32), persisted in CacheStorage + IndexedDB (0 network refetches on reload or tab revisit) and streamed via 24 kHz AudioWorklet ring buffer with 0 underruns.

Held-Out 24 kHz Studio Test Leaderboard (N = 240 Utterances; B = 1,000 Bootstrap 95% CIs)

System Active Footprint (↓) Sample Rate Coverage (↑) TTFA p50 (ms, ↓) Mean RTF (↓) MCD 0–8k (dB, ↓) Studio 8–12k HF Err (dB, ↓) Log-F0 RMSE (c, ↓) Dur MAE (s, ↓)
Base facebook/mms-tts-hin (Raw) 138.8 MB 16 kHz 35.0% 1.0 0.030x 7.97 [7.69, 8.24] 66.24 [65.48, 66.95] 1018.47 [987.17, 1050.48] 3.21 [2.89, 3.54]
Meta MMS 5-Specialist Fleet (5x VITS) 694.0 MB 16 kHz 100.0% 60.2 0.024x 5.09 [5.03, 5.15] 65.90 [65.49, 66.33] 676.29 [661.53, 690.29] 1.34 [1.21, 1.48]
Ninada Tier-2 Zero-Dep Klatt Fallback 0.0 MB 24 kHz 100.0% 104.0 0.0305x 10.38 [10.26, 10.50] 41.94 [41.27, 42.56] 613.77 [597.33, 630.07] 0.98 [0.88, 1.08]
Ninada v4.0 Untuned Warm-Start (step=0) 112.0 MB 24 kHz 100.0% 189.2 0.047x 4.60 [4.54, 4.65] 11.01 [10.68, 11.35] 639.61 [626.39, 653.49] 0.95 [0.86, 1.04]
Ninada v4.0 Native Studio PyTorch (FP32) 112.0 MB 24 kHz 100.0% 45.3 0.040x 3.40 [3.37, 3.43] 6.34 [6.16, 6.52] 529.20 [514.68, 542.48] 0.57 [0.50, 0.63]
Ninada v4.0 Native W8A32+FP16 ONNX (Browser) 27.9 MB 24 kHz 100.0% 372.7 0.197x 3.39 [3.36, 3.43] 6.37 [6.19, 6.57] 530.38 [517.00, 543.32] 0.56 [0.50, 0.62]

24 kHz Streaming Quickstart

import ninada from 'ninada';

const voice = await ninada('kannada', {
  models: {
    kn: 'https://huggingface.co/gnumanth/ninada/resolve/main/onnx/kn.onnx',
    sa: 'https://huggingface.co/gnumanth/ninada/resolve/main/onnx/sa.onnx',
  },
});
for await (const chunk of voice.stream('ನಮಸ್ಕಾರ, ಇಂದು ಬೆಂಗಳೂರಿನಲ್ಲಿ ಹವಾಮಾನ ತುಂಬಾ ಚೆನ್ನಾಗಿದೆ.')) {
  playPcm24k(chunk.pcm, chunk.sampleRate); // 24,000 Hz native Kannada studio stream!
}
from ninada import Ninada

tts = Ninada(lang="sa")
for chunk in tts.stream("प्रज्ञापूर्वकव्यापारवत्त्वं जीवत्वम् । यथार्थज्ञानं प्रमाणम् ॥"):
    play(chunk["pcm"], chunk["sample_rate"])  # 24,000 Hz float32 native Sanskrit PCM