File size: 3,803 Bytes
b59e10d
 
 
 
 
69aeb7e
b59e10d
 
69aeb7e
 
 
a295d2a
 
 
 
 
 
 
 
 
 
 
 
b59e10d
69aeb7e
b59e10d
69aeb7e
 
b59e10d
 
69aeb7e
b59e10d
a295d2a
 
b59e10d
 
69aeb7e
 
 
a295d2a
69aeb7e
 
 
 
b59e10d
69aeb7e
b59e10d
a295d2a
69aeb7e
b59e10d
 
69aeb7e
b59e10d
69aeb7e
 
 
 
b59e10d
 
 
 
 
69aeb7e
 
b59e10d
 
 
 
 
 
 
 
 
 
 
 
69aeb7e
 
 
 
 
 
 
 
 
b59e10d
69aeb7e
 
 
 
 
 
 
b59e10d
 
69aeb7e
 
 
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
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()