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()