Spaces:
Sleeping
Sleeping
| 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() |