|
|
""" |
|
|
Configuration for SYSPIN Multi-lingual TTS System |
|
|
""" |
|
|
|
|
|
from dataclasses import dataclass |
|
|
from typing import Dict, Optional |
|
|
import os |
|
|
|
|
|
|
|
|
MODELS_DIR = os.path.join(os.path.dirname(os.path.dirname(__file__)), "models") |
|
|
|
|
|
|
|
|
@dataclass |
|
|
class LanguageConfig: |
|
|
"""Configuration for each language""" |
|
|
|
|
|
name: str |
|
|
code: str |
|
|
hf_model_id: str |
|
|
model_filename: str |
|
|
chars_filename: str = "chars.txt" |
|
|
sample_rate: int = 22050 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
LANGUAGE_CONFIGS: Dict[str, LanguageConfig] = { |
|
|
|
|
|
"hi_male": LanguageConfig( |
|
|
name="Hindi", |
|
|
code="hi", |
|
|
hf_model_id="SYSPIN/tts_vits_coquiai_HindiMale", |
|
|
model_filename="hi_male_vits_30hrs.pt", |
|
|
), |
|
|
"hi_female": LanguageConfig( |
|
|
name="Hindi", |
|
|
code="hi", |
|
|
hf_model_id="SYSPIN/tts_vits_coquiai_HindiFemale", |
|
|
model_filename="hi_female_vits_30hrs.pt", |
|
|
), |
|
|
|
|
|
"bn_male": LanguageConfig( |
|
|
name="Bengali", |
|
|
code="bn", |
|
|
hf_model_id="SYSPIN/tts_vits_coquiai_BengaliMale", |
|
|
model_filename="bn_male_vits_30hrs.pt", |
|
|
), |
|
|
"bn_female": LanguageConfig( |
|
|
name="Bengali", |
|
|
code="bn", |
|
|
hf_model_id="SYSPIN/tts_vits_coquiai_BengaliFemale", |
|
|
model_filename="bn_female_vits_30hrs.pt", |
|
|
), |
|
|
|
|
|
"mr_male": LanguageConfig( |
|
|
name="Marathi", |
|
|
code="mr", |
|
|
hf_model_id="SYSPIN/tts_vits_coquiai_MarathiMale", |
|
|
model_filename="mr_male_vits_30hrs.pt", |
|
|
), |
|
|
"mr_female": LanguageConfig( |
|
|
name="Marathi", |
|
|
code="mr", |
|
|
hf_model_id="SYSPIN/tts_vits_coquiai_MarathiFemale", |
|
|
model_filename="mr_female_vits_30hrs.pt", |
|
|
), |
|
|
|
|
|
"te_male": LanguageConfig( |
|
|
name="Telugu", |
|
|
code="te", |
|
|
hf_model_id="SYSPIN/tts_vits_coquiai_TeluguMale", |
|
|
model_filename="te_male_vits_30hrs.pt", |
|
|
), |
|
|
"te_female": LanguageConfig( |
|
|
name="Telugu", |
|
|
code="te", |
|
|
hf_model_id="SYSPIN/tts_vits_coquiai_TeluguFemale", |
|
|
model_filename="te_female_vits_30hrs.pt", |
|
|
), |
|
|
|
|
|
"kn_male": LanguageConfig( |
|
|
name="Kannada", |
|
|
code="kn", |
|
|
hf_model_id="SYSPIN/tts_vits_coquiai_KannadaMale", |
|
|
model_filename="kn_male_vits_30hrs.pt", |
|
|
), |
|
|
"kn_female": LanguageConfig( |
|
|
name="Kannada", |
|
|
code="kn", |
|
|
hf_model_id="SYSPIN/tts_vits_coquiai_KannadaFemale", |
|
|
model_filename="kn_female_vits_30hrs.pt", |
|
|
), |
|
|
|
|
|
"bho_male": LanguageConfig( |
|
|
name="Bhojpuri", |
|
|
code="bho", |
|
|
hf_model_id="SYSPIN/tts_vits_coquiai_BhojpuriMale", |
|
|
model_filename="checkpoint_200000.pth", |
|
|
), |
|
|
"bho_female": LanguageConfig( |
|
|
name="Bhojpuri", |
|
|
code="bho", |
|
|
hf_model_id="SYSPIN/tts_vits_coquiai_BhojpuriFemale", |
|
|
model_filename="checkpoint_340000.pth", |
|
|
), |
|
|
|
|
|
"hne_male": LanguageConfig( |
|
|
name="Chhattisgarhi", |
|
|
code="hne", |
|
|
hf_model_id="SYSPIN/tts_vits_coquiai_ChhattisgarhiMale", |
|
|
model_filename="ch_male_vits_30hrs.pt", |
|
|
), |
|
|
"hne_female": LanguageConfig( |
|
|
name="Chhattisgarhi", |
|
|
code="hne", |
|
|
hf_model_id="SYSPIN/tts_vits_coquiai_ChhattisgarhiFemale", |
|
|
model_filename="ch_female_vits_30hrs.pt", |
|
|
), |
|
|
|
|
|
"mai_male": LanguageConfig( |
|
|
name="Maithili", |
|
|
code="mai", |
|
|
hf_model_id="SYSPIN/tts_vits_coquiai_MaithiliMale", |
|
|
model_filename="mt_male_vits_30hrs.pt", |
|
|
), |
|
|
"mai_female": LanguageConfig( |
|
|
name="Maithili", |
|
|
code="mai", |
|
|
hf_model_id="SYSPIN/tts_vits_coquiai_MaithiliFemale", |
|
|
model_filename="mt_female_vits_30hrs.pt", |
|
|
), |
|
|
|
|
|
"mag_male": LanguageConfig( |
|
|
name="Magahi", |
|
|
code="mag", |
|
|
hf_model_id="SYSPIN/tts_vits_coquiai_MagahiMale", |
|
|
model_filename="mg_male_vits_30hrs.pt", |
|
|
), |
|
|
"mag_female": LanguageConfig( |
|
|
name="Magahi", |
|
|
code="mag", |
|
|
hf_model_id="SYSPIN/tts_vits_coquiai_MagahiFemale", |
|
|
model_filename="mg_female_vits_30hrs.pt", |
|
|
), |
|
|
|
|
|
"en_male": LanguageConfig( |
|
|
name="English", |
|
|
code="en", |
|
|
hf_model_id="SYSPIN/tts_vits_coquiai_EnglishMale", |
|
|
model_filename="en_male_vits_30hrs.pt", |
|
|
), |
|
|
"en_female": LanguageConfig( |
|
|
name="English", |
|
|
code="en", |
|
|
hf_model_id="SYSPIN/tts_vits_coquiai_EnglishFemale", |
|
|
model_filename="en_female_vits_30hrs.pt", |
|
|
), |
|
|
|
|
|
"gu_mms": LanguageConfig( |
|
|
name="Gujarati", |
|
|
code="gu", |
|
|
hf_model_id="facebook/mms-tts-guj", |
|
|
model_filename="mms_guj.pt", |
|
|
sample_rate=16000, |
|
|
), |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
STYLE_PRESETS = { |
|
|
"default": {"speed": 1.0, "pitch": 1.0, "energy": 1.0}, |
|
|
"slow": {"speed": 0.75, "pitch": 1.0, "energy": 1.0}, |
|
|
"fast": {"speed": 1.25, "pitch": 1.0, "energy": 1.0}, |
|
|
"soft": {"speed": 0.9, "pitch": 0.95, "energy": 0.7}, |
|
|
"loud": {"speed": 1.0, "pitch": 1.05, "energy": 1.3}, |
|
|
"happy": {"speed": 1.1, "pitch": 1.1, "energy": 1.2}, |
|
|
"sad": {"speed": 0.85, "pitch": 0.9, "energy": 0.8}, |
|
|
"calm": {"speed": 0.9, "pitch": 0.95, "energy": 0.85}, |
|
|
"excited": {"speed": 1.2, "pitch": 1.15, "energy": 1.3}, |
|
|
} |
|
|
|
|
|
|
|
|
def get_available_languages() -> Dict[str, str]: |
|
|
"""Returns mapping of language codes to names""" |
|
|
seen = {} |
|
|
for key, config in LANGUAGE_CONFIGS.items(): |
|
|
if config.code not in seen: |
|
|
seen[config.code] = config.name |
|
|
return seen |
|
|
|
|
|
|
|
|
def get_available_voices() -> Dict[str, Dict]: |
|
|
"""Returns all available voice configurations""" |
|
|
return { |
|
|
key: { |
|
|
"name": config.name, |
|
|
"code": config.code, |
|
|
"gender": ( |
|
|
"male" |
|
|
if "male" in key |
|
|
else ("female" if "female" in key else "neutral") |
|
|
), |
|
|
} |
|
|
for key, config in LANGUAGE_CONFIGS.items() |
|
|
} |
|
|
|
|
|
|
|
|
def get_style_presets() -> Dict[str, Dict]: |
|
|
"""Returns available style presets""" |
|
|
return STYLE_PRESETS |
|
|
|