File size: 5,664 Bytes
07a4c5d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d8ef57c
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
import subprocess
import os
import gradio as gr
from pydub import AudioSegment
from voice_map import SUPPORTED_VOICES

def generate_audio(texto, modelo_de_voz, velocidade):
    if velocidade is None:  # Verifique se velocidade é None
        velocidade = 0  # Defina um valor padrão se velocidade for None

    if velocidade >= 0:
        rate_str = f"+{velocidade}%"
    else:
        rate_str = f"{velocidade}%"
    
    output_dir = "output"
    os.makedirs(output_dir, exist_ok=True)  # Certifique-se de que o diretório de saída exista

    mp3_output_file = os.path.join(output_dir, "new_audio.mp3")

    cmd = ["edge-tts", "--rate=" + rate_str, "-v", modelo_de_voz, "-t", texto, "--write-media", mp3_output_file]

    print("Gerando áudio...")
    try:
        subprocess.run(cmd, check=True)
    except subprocess.CalledProcessError as e:
        print("Erro ao gerar áudio:", e)
        return None

    print("Áudio gerado com sucesso!")

    # Convertendo o arquivo de MP3 para WAV
    wav_output_file = os.path.join(output_dir, "new_audio.wav")
    audio = AudioSegment.from_mp3(mp3_output_file)
    audio.export(wav_output_file, format="wav")

    return wav_output_file  # Retorna o caminho completo do arquivo de áudio WAV

from elevenlabs import generate

def generate_audio_elevenlabsfree(texto, modelo_de_voz):
    output_dir = "output"
    os.makedirs(output_dir, exist_ok=True)  # Certifique-se de que o diretório de saída exista

    try:
        # Gerar áudio usando elevenlabs
        audio = generate(
            text=texto,
            voice=modelo_de_voz,
            model='eleven_multilingual_v2'
        )
        
        # Caminho completo para o arquivo de saída
        output_file_path = os.path.join(output_dir, "new_audio.wav")

        # Escrever os dados do áudio no arquivo WAV
        with open(output_file_path, 'wb') as wf:
            wf.write(audio)

        print("Áudio gerado com sucesso em:", output_file_path)
        return output_file_path
    except Exception as e:
        print("Erro ao gerar áudio:", e)
        return None

badges = """
<div style="display: flex">
<span style="margin-right: 5px"> 

[ ![GitHub](https://img.shields.io/badge/github-%23121011.svg?style=for-the-badge&logo=github&logoColor=white) ](https://github.com/rafaelGodoyEbert)
 
</span>
<span style="margin-right: 5px"> 

[ ![Twitter](https://img.shields.io/badge/Twitter-%231DA1F2.svg?style=for-the-badge&logo=Twitter&logoColor=white) ](https://twitter.com/GodoyEbert)
 
</span>
<span>

[ ![](https://dcbadge.vercel.app/api/server/aihubbrasil) ](https://discord.gg/aihubbrasil)

</span>
</div>
"""

description = """
# TTS Rápido
 TTS Rápido, para todos aqueles que sempre me pediam alguma forma de fazer algum TTS.<br>
 Tem em diversos idiomas, só aproveitar<br>
 Increva-se no canal do <a href='https://www.youtube.com/@aihubbrasil' target='_blank'>Youtube do AI HUB Brasil</a> e no meu pessoal <a href='https://www.youtube.com/@godoyy' target='_blank'>Godoyy</a>
"""


with gr.Blocks(theme=gr.themes.Default(primary_hue="green", secondary_hue="blue"), title="TTS Rápido") as iface:
    gr.Markdown(badges)
    gr.Markdown(description)
    title="TTS Rápido"
    description="Digite o texto, escolha o modelo de voz e ajuste a velocidade para gerar um áudio. O áudio resultante pode ser reproduzido diretamente no Gradio."

    with gr.Tabs():
        with gr.TabItem("Edge-TTS"):
            gr.Markdown("Botei todos os idiomas possível, até onde testei, é ilimitado, podendo até mesmo colocar um livro inteiro, mas claro, tem a questão de tempo, quanto maior o texto, mais demorado é.")
            # Defina os elementos de entrada e saída
            audio_input = gr.Textbox(label="Texto", value='Texto de exemplo!', interactive=True)
            voice_model_input = gr.Dropdown(SUPPORTED_VOICES, label="Modelo de Voz", value="pt-BR-AntonioNeural")
            speed_input = gr.Slider(minimum=-200, maximum=200, label="Velocidade (%)", value=0)
            audio_output = gr.Audio(label="Áudio", type="filepath", interactive=False)
            edgetts_button = gr.Button(value="Falar")
            edgetts_button.click(fn=generate_audio, inputs=[audio_input, voice_model_input], outputs=[audio_output])
            clear_button = gr.ClearButton(audio_input, value='Limpar')
            gr.Markdown("Agradecimentos a rany2 pelo Edge-TTS")

        with gr.TabItem("Elevenlabs SEM API"):
            gr.Markdown("Esse é a API gratuita que é disponivel pela própria Elevenlabs, não sei os limites, mas sei que tem, acredito que após 3 requests seguidos já caia, então tenha certeza o texto que vá usar.")
            audio_input = gr.Textbox(label="Texto (Acho que o limite é 250 caracteres)", value='Texto de exemplo!', interactive=True)
            voice_model_input = gr.Dropdown(['Arnold', 'Antoni','Bella', 'Rachel', 'Drew', 'Clyde', 'Paul' ], label="Modelo de Voz", value="Arnold")
            audio_output = gr.Audio(label="Áudio", type="filepath", interactive=False)
            elevenlabs_button = gr.Button(value="Falar")
            elevenlabs_button.click(fn=generate_audio_elevenlabsfree, inputs=[audio_input, voice_model_input], outputs=[audio_output])
            clear_button = gr.ClearButton(audio_input, value='Limpar')
            gr.Markdown("Agradecimentos ao Elevenlabs")

            # Executar o aplicativo Gradio
        gr.Markdown("""
                    Desenvolvido por Rafael Godoy <br>
                    Apoie o projeto pelo https://nubank.com.br/pagar/1ls6a4/0QpSSbWBSq, qualquer valor é bem vindo.
                    """)
        iface.launch(share=True)