Spaces:
Running
Running
faelfernandes
commited on
Commit
•
a0cd857
1
Parent(s):
3e47526
Update app.py
Browse files
app.py
CHANGED
@@ -3,45 +3,70 @@ import edge_tts
|
|
3 |
import asyncio
|
4 |
import os
|
5 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
# Função para gerar o áudio
|
7 |
-
async def text_to_speech(text,
|
8 |
-
# Mapeamento de idiomas para vozes da Azure
|
9 |
-
voices = {
|
10 |
-
"Português (Brasil)": "pt-BR-FranciscaNeural",
|
11 |
-
"Inglês": "en-US-AriaNeural",
|
12 |
-
"Espanhol": "es-ES-ElviraNeural",
|
13 |
-
"Francês": "fr-FR-DeniseNeural",
|
14 |
-
"Italiano": "it-IT-ElsaNeural"
|
15 |
-
}
|
16 |
-
|
17 |
-
voice = voices.get(language, "pt-BR-FranciscaNeural")
|
18 |
-
|
19 |
-
# Gerar um nome de arquivo único
|
20 |
output_file = f"output_{hash(text)}.mp3"
|
21 |
-
|
22 |
-
# Criar a comunicação com o edge-tts
|
23 |
communicate = edge_tts.Communicate(text, voice)
|
24 |
-
|
25 |
-
# Salvar o áudio
|
26 |
await communicate.save(output_file)
|
27 |
-
|
28 |
return output_file
|
29 |
|
30 |
# Função para processar a entrada e chamar o TTS
|
31 |
-
def process_tts(text,
|
32 |
-
return asyncio.run(text_to_speech(text,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
33 |
|
34 |
# Configurar a interface Gradio
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
45 |
|
46 |
# Iniciar a aplicação
|
47 |
iface.launch()
|
|
|
3 |
import asyncio
|
4 |
import os
|
5 |
|
6 |
+
# Função para obter todas as vozes disponíveis
|
7 |
+
async def get_voices():
|
8 |
+
voices = await edge_tts.list_voices()
|
9 |
+
return voices
|
10 |
+
|
11 |
+
# Função para filtrar vozes por idioma
|
12 |
+
def filter_voices_by_language(voices, language):
|
13 |
+
return [v for v in voices if v.locale.startswith(language)]
|
14 |
+
|
15 |
# Função para gerar o áudio
|
16 |
+
async def text_to_speech(text, voice):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
17 |
output_file = f"output_{hash(text)}.mp3"
|
|
|
|
|
18 |
communicate = edge_tts.Communicate(text, voice)
|
|
|
|
|
19 |
await communicate.save(output_file)
|
|
|
20 |
return output_file
|
21 |
|
22 |
# Função para processar a entrada e chamar o TTS
|
23 |
+
def process_tts(text, voice):
|
24 |
+
return asyncio.run(text_to_speech(text, voice))
|
25 |
+
|
26 |
+
# Função para atualizar as opções de voz com base no idioma selecionado
|
27 |
+
def update_voice_options(language):
|
28 |
+
voices = asyncio.run(get_voices())
|
29 |
+
|
30 |
+
language_codes = {
|
31 |
+
"Português (Brasil)": "pt-BR",
|
32 |
+
"Inglês": "en",
|
33 |
+
"Espanhol": "es",
|
34 |
+
"Francês": "fr",
|
35 |
+
"Italiano": "it",
|
36 |
+
"Multilíngue": "multi"
|
37 |
+
}
|
38 |
+
|
39 |
+
if language == "Multilíngue":
|
40 |
+
filtered_voices = [v for v in voices if "multilingual" in v.properties.get("VoiceType", "").lower()]
|
41 |
+
else:
|
42 |
+
filtered_voices = filter_voices_by_language(voices, language_codes[language])
|
43 |
+
|
44 |
+
voice_options = [f"{v.short_name} ({v.gender})" for v in filtered_voices]
|
45 |
+
return gr.Dropdown.update(choices=voice_options, value=voice_options[0] if voice_options else None)
|
46 |
|
47 |
# Configurar a interface Gradio
|
48 |
+
with gr.Blocks() as iface:
|
49 |
+
gr.Markdown("# Conversor de Texto para Fala usando Azure TTS")
|
50 |
+
gr.Markdown("Converta texto em fala usando as vozes da Azure em diferentes idiomas.")
|
51 |
+
|
52 |
+
with gr.Row():
|
53 |
+
language = gr.Dropdown(
|
54 |
+
["Português (Brasil)", "Inglês", "Espanhol", "Francês", "Italiano", "Multilíngue"],
|
55 |
+
label="Idioma",
|
56 |
+
value="Português (Brasil)"
|
57 |
+
)
|
58 |
+
voice = gr.Dropdown(label="Voz")
|
59 |
+
|
60 |
+
text_input = gr.Textbox(label="Texto para converter em fala", lines=3)
|
61 |
+
audio_output = gr.Audio(label="Áudio gerado")
|
62 |
+
|
63 |
+
convert_button = gr.Button("Converter")
|
64 |
+
|
65 |
+
language.change(update_voice_options, inputs=[language], outputs=[voice])
|
66 |
+
convert_button.click(process_tts, inputs=[text_input, voice], outputs=[audio_output])
|
67 |
+
|
68 |
+
# Inicializar as opções de voz
|
69 |
+
iface.load(update_voice_options, inputs=[language], outputs=[voice])
|
70 |
|
71 |
# Iniciar a aplicação
|
72 |
iface.launch()
|