File size: 2,497 Bytes
366387a
 
 
 
 
a0cd857
 
 
 
 
 
 
 
 
366387a
a0cd857
366387a
 
 
 
 
 
a0cd857
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
366387a
 
a0cd857
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
366387a
 
 
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
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()