Spaces:
Running
Running
File size: 2,828 Bytes
921ce94 a1629f5 921ce94 abc9b38 921ce94 abc9b38 921ce94 a1629f5 921ce94 a1629f5 26a8344 a1629f5 26a8344 a1629f5 26a8344 a1629f5 921ce94 abc9b38 921ce94 7172c2f a1629f5 6108420 e21f566 2c4cdd7 a1629f5 2c4cdd7 abc9b38 a1629f5 9a815df a1629f5 76dcd24 a1629f5 921ce94 c21d786 921ce94 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | 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() |