TTS-grc-MMS / app.py
AniseF's picture
Update app.py
c21d786 verified
import gradio as gr
from transformers import VitsModel, AutoTokenizer
import torch
import numpy as np
# Carregamento do modelo e tokenizer
model_id = "facebook/mms-tts-grc"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = VitsModel.from_pretrained(model_id)
def synthesize_greek(text, speed):
if not text or len(text.strip()) == 0:
return None
try:
# Log para conferirmos se o slider está enviando o valor correto
print(f"Gerando áudio com velocidade: {speed}")
inputs = tokenizer(text, return_tensors="pt")
# O modelo VITS da Transformers usa o speaking_rate como um multiplicador.
# Se 1.0 é o normal, 2.0 deveria ser o dobro da duração (mais lento).
# Vamos garantir que o atributo seja aplicado antes da inferência.
model.speaking_rate = float(speed)
with torch.no_grad():
output = model(**inputs).waveform
audio_numpy = output[0].cpu().numpy()
sampling_rate = model.config.sampling_rate
return (sampling_rate, audio_numpy)
except Exception as e:
print(f"Erro na síntese: {e}")
return None
# Exemplos clássicos politônicos
greek_examples = [
["Γνῶθι σεαυτόν.", 0.6],
["Ὁ βίος βραχύς, ἡ δὲ τέχνη μακρή.", 1],
["οἶδα ὅτι οὐδὲν οἶδα.", 0.8],
["Ἐν ἀρχῇ ἦν ὁ λόγος, καὶ ὁ λόγος ἦν πρὸς τὸν θεόν.", 0.6]
]
with gr.Blocks(theme=gr.themes.Soft()) as demo:
gr.Markdown("# 🏛️ MMS-TTS Grego Antigo - Pronúncia em grego moderno")
gr.Markdown("### Ajuste a velocidade para uma pronúncia mais clara e pausada")
gr.Markdown("### Valor menor = maior lentidão")
with gr.Row():
with gr.Column():
input_text = gr.Textbox(
label="Inserir texto em Grego Politônico",
placeholder="Ex: ἐν ἀρχῇ ἦν ὁ λόγος...",
lines=5
)
speed_slider = gr.Slider(
minimum=0.5,
maximum=2.0, # Aumentado para permitir uma lentidão extrema
value=1.0,
step=0.1,
label="Ajuste a velocidade para obter a pronúncia ideal"
)
btn = gr.Button("Gerar Áudio", variant="primary")
with gr.Column():
audio_output = gr.Audio(label="Áudio Sintetizado")
btn.click(
fn=synthesize_greek,
inputs=[input_text, speed_slider],
outputs=audio_output
)
gr.Examples(
examples=greek_examples,
inputs=[input_text, speed_slider],
label="Exemplos"
)
if __name__ == "__main__":
demo.launch()