bashkir-tts / app.py
taymasildar's picture
Upload app.py with huggingface_hub
16270ef verified
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)