Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
@@ -12,11 +12,13 @@ subprocess.run(comando_elevenlabs)
|
|
12 |
# Executando o comando para instalar ou atualizar o pacote edge-tts
|
13 |
subprocess.run(comando_edge_tts)
|
14 |
|
|
|
15 |
import subprocess
|
16 |
import os
|
17 |
import gradio as gr
|
18 |
from pydub import AudioSegment
|
19 |
from voice_map import SUPPORTED_VOICES
|
|
|
20 |
from pydub.silence import split_on_silence
|
21 |
|
22 |
def generate_audio(texto, modelo_de_voz, velocidade):
|
@@ -77,17 +79,21 @@ def controlador_generate_audio(audio_input, voice_model_input, speed_input, chec
|
|
77 |
print("Erro ao gerar áudio.")
|
78 |
return audio_file # Retornar o caminho do arquivo de áudio
|
79 |
|
80 |
-
from elevenlabs import generate
|
|
|
81 |
|
82 |
-
def generate_audio_elevenlabsfree(texto,
|
83 |
output_dir = "output"
|
84 |
os.makedirs(output_dir, exist_ok=True) # Certifique-se de que o diretório de saída exista
|
85 |
|
86 |
try:
|
|
|
|
|
|
|
87 |
# Gerar áudio usando elevenlabs
|
88 |
audio = generate(
|
89 |
text=texto,
|
90 |
-
voice=
|
91 |
model='eleven_multilingual_v2'
|
92 |
)
|
93 |
|
@@ -103,35 +109,77 @@ def generate_audio_elevenlabsfree(texto, modelo_de_voz):
|
|
103 |
except Exception as e:
|
104 |
print("Erro ao gerar áudio:", e)
|
105 |
return None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
106 |
|
107 |
-
|
108 |
-
<div style="display: flex">
|
109 |
-
<span style="margin-right: 5px">
|
110 |
-
|
111 |
-
[  ](https://github.com/rafaelGodoyEbert)
|
112 |
-
|
113 |
-
</span>
|
114 |
-
<span style="margin-right: 5px">
|
115 |
-
|
116 |
-
[  ](https://twitter.com/GodoyEbert)
|
117 |
-
|
118 |
-
</span>
|
119 |
-
<span>
|
120 |
-
|
121 |
-
[  ](https://discord.gg/aihubbrasil)
|
122 |
-
|
123 |
-
</span>
|
124 |
-
</div>
|
125 |
-
"""
|
126 |
-
|
127 |
-
description = """
|
128 |
-
# TTS Rápido
|
129 |
-
TTS Rápido, para todos aqueles que sempre me pediam alguma forma de fazer algum TTS.<br>
|
130 |
-
Tem em diversos idiomas, só aproveitar<br>
|
131 |
-
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>
|
132 |
-
"""
|
133 |
-
|
134 |
-
|
135 |
with gr.Blocks(theme=gr.themes.Default(primary_hue="green", secondary_hue="blue"), title="TTS Rápido") as iface:
|
136 |
gr.Markdown(badges)
|
137 |
gr.Markdown(description)
|
@@ -154,17 +202,43 @@ with gr.Blocks(theme=gr.themes.Default(primary_hue="green", secondary_hue="blue"
|
|
154 |
clear_button = gr.ClearButton(audio_input, value='Limpar')
|
155 |
gr.Markdown("Agradecimentos a rany2 pelo Edge-TTS")
|
156 |
|
157 |
-
with gr.TabItem("Elevenlabs
|
158 |
-
gr.
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
168 |
# Executar o aplicativo Gradio
|
169 |
gr.Markdown("""
|
170 |
Desenvolvido por Rafael Godoy <br>
|
|
|
12 |
# Executando o comando para instalar ou atualizar o pacote edge-tts
|
13 |
subprocess.run(comando_edge_tts)
|
14 |
|
15 |
+
|
16 |
import subprocess
|
17 |
import os
|
18 |
import gradio as gr
|
19 |
from pydub import AudioSegment
|
20 |
from voice_map import SUPPORTED_VOICES
|
21 |
+
from header import badges, description
|
22 |
from pydub.silence import split_on_silence
|
23 |
|
24 |
def generate_audio(texto, modelo_de_voz, velocidade):
|
|
|
79 |
print("Erro ao gerar áudio.")
|
80 |
return audio_file # Retornar o caminho do arquivo de áudio
|
81 |
|
82 |
+
from elevenlabs import voices, generate
|
83 |
+
import requests
|
84 |
|
85 |
+
def generate_audio_elevenlabsfree(texto, voice_name):
|
86 |
output_dir = "output"
|
87 |
os.makedirs(output_dir, exist_ok=True) # Certifique-se de que o diretório de saída exista
|
88 |
|
89 |
try:
|
90 |
+
# Pegar o nome abreviado do modelo de voz
|
91 |
+
modelo_abreviado = voice_name
|
92 |
+
|
93 |
# Gerar áudio usando elevenlabs
|
94 |
audio = generate(
|
95 |
text=texto,
|
96 |
+
voice=modelo_abreviado,
|
97 |
model='eleven_multilingual_v2'
|
98 |
)
|
99 |
|
|
|
109 |
except Exception as e:
|
110 |
print("Erro ao gerar áudio:", e)
|
111 |
return None
|
112 |
+
|
113 |
+
def elevenlabsAPI(audio_input_elevenlabs_api, voice_model_input,model_elevenlabs_t, stability_elevenlabs, similarity_boost_elevenlabs, style_elevenlabs, use_speaker_boost_elevenlabs, id_voz_input, id_api, output_dir="output"):
|
114 |
+
try:
|
115 |
+
if not id_api.strip():
|
116 |
+
print("API não fornecida.")
|
117 |
+
return None
|
118 |
+
|
119 |
+
id_api_value = id_api
|
120 |
+
modelos= model_elevenlabs_t
|
121 |
+
|
122 |
+
if id_voz_input.strip(): # Se um ID de voz foi fornecido
|
123 |
+
voice_id = id_voz_input
|
124 |
+
print(voice_id)
|
125 |
+
url = f"https://api.elevenlabs.io/v1/text-to-speech/{voice_id}"
|
126 |
+
headers = {
|
127 |
+
"Accept": "audio/mpeg",
|
128 |
+
"Content-Type": "application/json",
|
129 |
+
"xi-api-key": id_api
|
130 |
+
}
|
131 |
+
print(modelos)
|
132 |
+
print(stability_elevenlabs)
|
133 |
+
print(similarity_boost_elevenlabs)
|
134 |
+
print(style_elevenlabs)
|
135 |
+
print(use_speaker_boost_elevenlabs)
|
136 |
+
data = {
|
137 |
+
"text": audio_input_elevenlabs_api,
|
138 |
+
"model_id": modelos,
|
139 |
+
"voice_settings": {
|
140 |
+
"stability": stability_elevenlabs,
|
141 |
+
"similarity_boost": similarity_boost_elevenlabs,
|
142 |
+
"style": style_elevenlabs,
|
143 |
+
"use_speaker_boost": use_speaker_boost_elevenlabs,
|
144 |
+
}
|
145 |
+
}
|
146 |
+
print(data)
|
147 |
+
|
148 |
+
response = requests.post(url, headers=headers, json=data)
|
149 |
+
if response.status_code == 200:
|
150 |
+
audio = response.content
|
151 |
+
else:
|
152 |
+
print("Erro ao gerar áudio:", response.text)
|
153 |
+
return None
|
154 |
+
else: # Se nenhum ID de voz foi fornecido, usar o modelo de voz fornecido
|
155 |
+
print(modelos)
|
156 |
+
print(stability_elevenlabs)
|
157 |
+
print(similarity_boost_elevenlabs)
|
158 |
+
print(style_elevenlabs)
|
159 |
+
print(use_speaker_boost_elevenlabs)
|
160 |
+
audio = generate(
|
161 |
+
text=audio_input_elevenlabs_api,
|
162 |
+
voice=voice_model_input,
|
163 |
+
# voice=Voice(
|
164 |
+
# voice_id='EXAVITQu4vr4xnSDxMaL',
|
165 |
+
# name=voice_model_input,
|
166 |
+
# settings=VoiceSettings(stability=stability_elevenlabs, similarity_boost=similarity_boost_elevenlabs, style=style_elevenlabs, use_speaker_boost=use_speaker_boost_elevenlabs)
|
167 |
+
# ),
|
168 |
+
model=modelos,
|
169 |
+
api_key=id_api
|
170 |
+
)
|
171 |
+
|
172 |
+
if audio:
|
173 |
+
output_file_path = os.path.join(output_dir, "new_audio.wav")
|
174 |
+
with open(output_file_path, 'wb') as wf:
|
175 |
+
wf.write(audio)
|
176 |
+
print("Áudio gerado com sucesso em:", output_file_path)
|
177 |
+
return output_file_path
|
178 |
+
except Exception as e:
|
179 |
+
print("Erro ao gerar áudio:", e)
|
180 |
+
return None
|
181 |
|
182 |
+
all_voices = voices()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
183 |
with gr.Blocks(theme=gr.themes.Default(primary_hue="green", secondary_hue="blue"), title="TTS Rápido") as iface:
|
184 |
gr.Markdown(badges)
|
185 |
gr.Markdown(description)
|
|
|
202 |
clear_button = gr.ClearButton(audio_input, value='Limpar')
|
203 |
gr.Markdown("Agradecimentos a rany2 pelo Edge-TTS")
|
204 |
|
205 |
+
with gr.TabItem("Elevenlabs"):
|
206 |
+
with gr.TabItem("Elevenlabs Free"):
|
207 |
+
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.")
|
208 |
+
audio_input = gr.Textbox(label="Texto (Não botei limite de caracteres, mas não sei se tem limite no request)", value='Texto de exemplo!', interactive=True)
|
209 |
+
voice_model_input = gr.Dropdown([ voice.name for voice in all_voices], label="Modelo de Voz", value='Adam', interactive=True)
|
210 |
+
gr.Markdown("Se estiver usando huggingface e não rodar, vá em logs, que está acima da imagem do github e veja se já não passou o limite de request da API")
|
211 |
+
audio_output = gr.Audio(label="Resultado", type="filepath", interactive=False)
|
212 |
+
elevenlabs_button = gr.Button(value="Falar")
|
213 |
+
elevenlabs_button.click(fn=generate_audio_elevenlabsfree, inputs=[audio_input, voice_model_input], outputs=[audio_output])
|
214 |
+
clear_button = gr.ClearButton(audio_input, value='Limpar')
|
215 |
+
gr.Markdown("Agradecimentos ao Elevenlabs")
|
216 |
+
with gr.TabItem("Elevenlabs com API"):
|
217 |
+
gr.Markdown("Versão com API, basicamente mesma coisa que o site, mas por algum motivo as pessoas me pediram")
|
218 |
+
audio_input_elevenlabs_api = gr.Textbox(label="Texto (Acho que o limite é 2500 caracteres)", value='Texto de exemplo!', interactive=True)
|
219 |
+
with gr.Row():
|
220 |
+
id_api = gr.Textbox(label="Digite sua API (Obrigatório)", interactive=True)
|
221 |
+
voice_model_input = gr.Dropdown([ voice.name for voice in all_voices], label="Modelo de Voz", value="Adam", interactive=True)
|
222 |
+
id_voz_input = gr.Textbox(label="Ou digite o ID da voz", interactive=True)
|
223 |
+
gr.Markdown("Abaixo só funciona o Modelo (multilingual_v1,v2,mono), só funciona todas abaixo se tiver com o ID de voz (Por enquanto). <br> <a href='https://api.elevenlabs.io/v1/voices' target='_blank'>Nesse link</a> tem ID de voz, só filtrar por voice_id")
|
224 |
+
with gr.Row():
|
225 |
+
model_elevenlabs_t = gr.Dropdown(['eleven_multilingual_v2', 'eleven_multilingual_v1', 'eleven_monolingual_v1'], label="Modelo", value='eleven_multilingual_v2', interactive=True)
|
226 |
+
stability_elevenlabs = gr.Slider(0, 1, step=0.1, label="Establidade", value=0.67, interactive=True)
|
227 |
+
similarity_boost_elevenlabs = gr.Slider(0, 1, step=0.1, label="Claridade + Similaridade", value=0.8, interactive=True)
|
228 |
+
style_elevenlabs = gr.Slider(0, 1, step=0.1, label="Exagero de estilo", value=0.0, interactive=True)
|
229 |
+
use_speaker_boost_elevenlabs = gr.Checkbox(label="Speaker Boost", value=True, interactive=True)
|
230 |
+
gr.Markdown("Se estiver usando huggingface e não rodar, vá em logs, que está acima da imagem do github e veja se já não passou o limite de request da API")
|
231 |
+
audio_output = gr.Audio(label="Resultado", type="filepath", interactive=False)
|
232 |
+
elevenlabs_button = gr.Button(value="Falar")
|
233 |
+
elevenlabs_button.click(fn=elevenlabsAPI, inputs=[audio_input_elevenlabs_api, voice_model_input, model_elevenlabs_t, stability_elevenlabs, similarity_boost_elevenlabs, style_elevenlabs, use_speaker_boost_elevenlabs, id_voz_input, id_api], outputs=[audio_output])
|
234 |
+
clear_button = gr.ClearButton(audio_input_elevenlabs_api, value='Limpar')
|
235 |
+
gr.Markdown("Agradecimentos ao Elevenlabs")
|
236 |
+
with gr.TabItem("Conqui-TTS"):
|
237 |
+
gr.Markdown("Em DEV - Conqui")
|
238 |
+
# Chame a função do arquivo conqui.py para criar os blocos específicos
|
239 |
+
# tabs_conqui = conqui.criar_tab_conqui()
|
240 |
+
# Adicione os blocos criados ao bloco principal
|
241 |
+
# gr.Component(tabs_conqui)
|
242 |
# Executar o aplicativo Gradio
|
243 |
gr.Markdown("""
|
244 |
Desenvolvido por Rafael Godoy <br>
|