TTS_PT / app.py
DHEIVER's picture
Update app.py
9c6803e verified
raw
history blame
4.21 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>
"""
# 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 com layout moderno
with gr.Blocks(title=my_title, css=".gradio-container {max-width: 800px; margin: auto;}") as demo:
gr.Markdown(f"# {my_title}")
gr.Markdown(my_description)
with gr.Row():
with gr.Column():
text_input = gr.Textbox(lines=10, label="Texto em Português", placeholder="Insira o texto aqui... (até 500 tokens)")
voice_selector = gr.Radio(label="Voz", choices=TTS_VOICES, value="Ed")
submit_button = gr.Button("Gerar Áudio", variant="primary")
with gr.Column():
audio_output = gr.Audio(type="filepath", label="Áudio Gerado")
gr.Markdown(my_article)
# Exemplos
gr.Examples(examples=my_examples, inputs=[text_input, voice_selector], outputs=audio_output, fn=tts, cache_examples=True)
# Ação do botão
submit_button.click(fn=tts, inputs=[text_input, voice_selector], outputs=audio_output)
# Iniciar a interface
demo.launch()