TTS-TSM / app.py
faelfernandes's picture
Update app.py
a0cd857 verified
raw
history blame
2.5 kB
import gradio as gr
import edge_tts
import asyncio
import os
# Função para obter todas as vozes disponíveis
async def get_voices():
voices = await edge_tts.list_voices()
return voices
# Função para filtrar vozes por idioma
def filter_voices_by_language(voices, language):
return [v for v in voices if v.locale.startswith(language)]
# Função para gerar o áudio
async def text_to_speech(text, voice):
output_file = f"output_{hash(text)}.mp3"
communicate = edge_tts.Communicate(text, voice)
await communicate.save(output_file)
return output_file
# Função para processar a entrada e chamar o TTS
def process_tts(text, voice):
return asyncio.run(text_to_speech(text, voice))
# Função para atualizar as opções de voz com base no idioma selecionado
def update_voice_options(language):
voices = asyncio.run(get_voices())
language_codes = {
"Português (Brasil)": "pt-BR",
"Inglês": "en",
"Espanhol": "es",
"Francês": "fr",
"Italiano": "it",
"Multilíngue": "multi"
}
if language == "Multilíngue":
filtered_voices = [v for v in voices if "multilingual" in v.properties.get("VoiceType", "").lower()]
else:
filtered_voices = filter_voices_by_language(voices, language_codes[language])
voice_options = [f"{v.short_name} ({v.gender})" for v in filtered_voices]
return gr.Dropdown.update(choices=voice_options, value=voice_options[0] if voice_options else None)
# Configurar a interface Gradio
with gr.Blocks() as iface:
gr.Markdown("# Conversor de Texto para Fala usando Azure TTS")
gr.Markdown("Converta texto em fala usando as vozes da Azure em diferentes idiomas.")
with gr.Row():
language = gr.Dropdown(
["Português (Brasil)", "Inglês", "Espanhol", "Francês", "Italiano", "Multilíngue"],
label="Idioma",
value="Português (Brasil)"
)
voice = gr.Dropdown(label="Voz")
text_input = gr.Textbox(label="Texto para converter em fala", lines=3)
audio_output = gr.Audio(label="Áudio gerado")
convert_button = gr.Button("Converter")
language.change(update_voice_options, inputs=[language], outputs=[voice])
convert_button.click(process_tts, inputs=[text_input, voice], outputs=[audio_output])
# Inicializar as opções de voz
iface.load(update_voice_options, inputs=[language], outputs=[voice])
# Iniciar a aplicação
iface.launch()