import os os.environ.setdefault("MPLBACKEND", "Agg") import gradio as gr import sherpa_onnx import tempfile from huggingface_hub import hf_hub_download MODEL_REPO = "willwade/mms-tts-multilingual-models-onnx" MODEL_FILE = "bak/model.onnx" TOKENS_FILE = "bak/tokens.txt" model_path = hf_hub_download(repo_id=MODEL_REPO, filename=MODEL_FILE) tokens_path = hf_hub_download(repo_id=MODEL_REPO, filename=TOKENS_FILE) config = sherpa_onnx.OfflineTtsConfig( model=sherpa_onnx.OfflineTtsModelConfig( vits=sherpa_onnx.OfflineTtsVitsModelConfig( model=model_path, tokens=tokens_path, noise_scale=0.667, length_scale=1.0, noise_scale_w=0.8, ), num_threads=2, ), ) tts = sherpa_onnx.OfflineTts(config) def tts_fn(text): if not text.strip(): return None audio = tts.generate(text.strip(), sid=0, speed=1.0) samples = audio.samples tmp = tempfile.NamedTemporaryFile(delete=False, suffix=".wav") sherpa_onnx.write_wave(tmp.name, samples, audio.sample_rate) return tmp.name app = gr.Blocks(title="Башҡортса TTS") with app: gr.Markdown("# 🎙️ Башҡортса TTS") gr.Markdown( "Офлайн озвучка текста на башкирском. " "Модель: MMS-TTS (Meta) via sherpa-onnx" ) with gr.Row(): with gr.Column(scale=3): text = gr.Textbox( label="Текст (башкирский кириллица)", placeholder="Бөгөн көн бик матур...", lines=6, value="Бөгөн көн бик матур. Һаумыһығыҙ, хәлдәрегеҙ нисек?", ) with gr.Row(): btn = gr.Button("▶ Озвучить", variant="primary") clear = gr.Button("✕ Очистить") with gr.Column(scale=2): audio = gr.Audio(label="Аудио", type="filepath") status = gr.Textbox( label="Статус", value="Готов", interactive=False ) btn.click(fn=tts_fn, inputs=text, outputs=audio, api_name="predict") text.submit(fn=tts_fn, inputs=text, outputs=audio) clear.click(lambda: ("", None, "Готов"), None, [text, audio, status]) gr.Markdown("---") gr.Markdown( "Сәләм, быны мин эшләнем — " "[instagram.com/ttaymas](https://instagram.com/ttaymas)" ) gr.Markdown( "**Модель:** facebook/mms-tts-bak (VITS) · " "**Лицензия:** CC-BY-NC 4.0" ) if __name__ == "__main__": app.launch(server_name="0.0.0.0", server_port=7860)