| """ |
| 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 |
|
|