TTS_PT / app.py
DHEIVER's picture
Update app.py
a295d2a verified
raw
history blame
3.8 kB
import gradio as gr
import tempfile
from TTS.utils.synthesizer import Synthesizer
from huggingface_hub import hf_hub_download
# Repositório do modelo no Hugging Face Hub
REPO_ID = "mbarnig/lb-de-fr-en-pt-coqui-vits-tts"
# Configurações da interface
my_title = "🇵🇹 Sintetizador de Fala em Português com Coqui TTS"
my_description = "Um sintetizador de fala em português baseado no modelo YourTTS da Coqui.ai. Insira o texto e gere o áudio!"
# Texto de exemplo com o máximo de tokens (500 tokens)
max_tokens_text = """
O vento norte e o Sol discutiam quem era o mais forte, quando surgiu um viajante envolvido numa capa.
O vento começou a soprar com toda a força, mas quanto mais soprava, mais o viajante se enrolava em sua capa.
Então, o Sol começou a brilhar suavemente, e o viajante, sentindo o calor, logo tirou a capa.
Assim, o Sol provou que o calor e a gentileza são mais eficazes do que a força bruta.
Esta história nos ensina que, muitas vezes, a delicadeza e a paciência são mais poderosas do que a agressividade.
Em nossa vida diária, podemos aplicar essa lição ao lidar com os outros, buscando sempre a compreensão e o diálogo.
A natureza nos oferece muitos exemplos de como a suavidade pode superar a força, e essa é uma lição valiosa para todos nós.
Que possamos sempre lembrar dessa história e agir com sabedoria em nossas interações com os outros.
"""
# Vozes disponíveis para português
TTS_VOICES = [
"Ed", # Voz masculina
"Linda" # Voz feminina
]
# Exemplo de uso
my_examples = [
[max_tokens_text, "Ed"], # Texto com máximo de tokens e voz masculina
[max_tokens_text, "Linda"] # Texto com máximo de tokens e voz feminina
]
# Artigo com informações adicionais
my_article = """
<h3>Guia do Usuário</h3>
<p>1. Insira o texto em português no campo de entrada (até 500 tokens).</p>
<p>2. Selecione a voz desejada (masculina ou feminina).</p>
<p>3. Clique em "Submit" para gerar o áudio.</p>
<p>4. Reproduza o áudio gerado ou faça o download.</p>
"""
# Componentes de entrada e saída
my_inputs = [
gr.Textbox(lines=10, label="Texto em Português", placeholder="Insira o texto aqui... (até 500 tokens)"),
gr.Radio(label="Voz", choices=TTS_VOICES, value="Ed") # Voz padrão: masculina
]
my_outputs = gr.Audio(type="filepath", label="Áudio Gerado")
# Função para sintetizar a fala
def tts(text: str, speaker_idx: str):
# Baixar os arquivos do modelo
best_model_path = hf_hub_download(repo_id=REPO_ID, filename="best_model.pth")
config_path = hf_hub_download(repo_id=REPO_ID, filename="config.json")
speakers_path = hf_hub_download(repo_id=REPO_ID, filename="speakers.pth")
languages_path = hf_hub_download(repo_id=REPO_ID, filename="language_ids.json")
speaker_encoder_model_path = hf_hub_download(repo_id=REPO_ID, filename="model_se.pth")
speaker_encoder_config_path = hf_hub_download(repo_id=REPO_ID, filename="config_se.json")
# Inicializar o sintetizador
synthesizer = Synthesizer(
best_model_path,
config_path,
speakers_path,
languages_path,
None,
None,
speaker_encoder_model_path,
speaker_encoder_config_path,
False
)
# Gerar o áudio
wavs = synthesizer.tts(text, speaker_idx, "Português") # Idioma fixo: Português
# Salvar o áudio em um arquivo temporário
with tempfile.NamedTemporaryFile(suffix=".wav", delete=False) as fp:
synthesizer.save_wav(wavs, fp)
return fp.name
# Criar a interface Gradio
iface = gr.Interface(
fn=tts,
inputs=my_inputs,
outputs=my_outputs,
title=my_title,
description=my_description,
article=my_article,
examples=my_examples,
allow_flagging=False
)
# Iniciar a interface
iface.launch()