File size: 4,018 Bytes
b59e10d 69aeb7e b59e10d 69aeb7e 0e9d1bc a295d2a b59e10d 69aeb7e b59e10d 69aeb7e b59e10d 69aeb7e 0e9d1bc 69aeb7e b59e10d 69aeb7e 0e9d1bc b59e10d 0e9d1bc 69aeb7e 0e9d1bc 69aeb7e 5b49376 69aeb7e 0e9d1bc 9c6803e 0e9d1bc 9c6803e bd8bee9 0e9d1bc bd8bee9 9c6803e bd8bee9 0e9d1bc bd8bee9 0e9d1bc bd8bee9 0e9d1bc |
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 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
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 com a voz desejada (masculina ou feminina)!
"""
# 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.
"""
# Vozes disponíveis para português
TTS_VOICES = [
"Ed", # Voz masculina
"Linda" # Voz feminina
]
# 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)
audio_path = fp.name # Caminho do arquivo gerado
return audio_path, audio_path # Retorna o caminho como áudio e arquivo
# Criar a interface Gradio
with gr.Blocks(title=my_title, css=".gradio-container {max-width: 900px; margin: auto;}") as demo:
gr.Markdown(f"<h1 style='text-align: center;'>{my_title}</h1>")
gr.Markdown(my_description)
with gr.Row():
with gr.Column(scale=1):
text_input = gr.Textbox(
lines=10,
label="Texto em Português",
placeholder="Insira o texto aqui... (máximo de 500 tokens)"
)
voice_selector = gr.Radio(
label="Voz",
choices=TTS_VOICES,
value="Ed"
)
submit_button = gr.Button("Gerar Áudio", variant="primary")
with gr.Column(scale=1):
audio_output = gr.Audio(type="filepath", label="Áudio Gerado")
download_button = gr.File(label="Baixar Áudio")
gr.Markdown("<hr>")
gr.Markdown("""
<h3>Guia do Usuário:</h3>
<ul>
<li>Insira o texto em português no campo de entrada (até 500 tokens).</li>
<li>Selecione a voz desejada (masculina ou feminina).</li>
<li>Clique em "Gerar Áudio" para gerar o arquivo de áudio.</li>
<li>Reproduza ou faça o download do áudio gerado.</li>
</ul>
""")
# Ação do botão
submit_button.click(
fn=tts,
inputs=[text_input, voice_selector],
outputs=[audio_output, download_button]
)
# Iniciar a interface
demo.launch()
|