Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
@@ -17,11 +17,9 @@ import os
|
|
17 |
import gradio as gr
|
18 |
from pydub import AudioSegment
|
19 |
from voice_map import SUPPORTED_VOICES
|
|
|
20 |
|
21 |
def generate_audio(texto, modelo_de_voz, velocidade):
|
22 |
-
if velocidade is None: # Verifique se velocidade é None
|
23 |
-
velocidade = 0 # Defina um valor padrão se velocidade for None
|
24 |
-
|
25 |
if velocidade >= 0:
|
26 |
rate_str = f"+{velocidade}%"
|
27 |
else:
|
@@ -50,6 +48,35 @@ def generate_audio(texto, modelo_de_voz, velocidade):
|
|
50 |
|
51 |
return wav_output_file # Retorna o caminho completo do arquivo de áudio WAV
|
52 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
53 |
from elevenlabs import generate
|
54 |
|
55 |
def generate_audio_elevenlabsfree(texto, modelo_de_voz):
|
@@ -117,10 +144,13 @@ with gr.Blocks(theme=gr.themes.Default(primary_hue="green", secondary_hue="blue"
|
|
117 |
# Defina os elementos de entrada e saída
|
118 |
audio_input = gr.Textbox(label="Texto", value='Texto de exemplo!', interactive=True)
|
119 |
voice_model_input = gr.Dropdown(SUPPORTED_VOICES, label="Modelo de Voz", value="pt-BR-AntonioNeural")
|
120 |
-
speed_input = gr.Slider(minimum=-200, maximum=200, label="Velocidade (%)", value=0)
|
121 |
-
|
|
|
122 |
edgetts_button = gr.Button(value="Falar")
|
123 |
-
edgetts_button.click(
|
|
|
|
|
124 |
clear_button = gr.ClearButton(audio_input, value='Limpar')
|
125 |
gr.Markdown("Agradecimentos a rany2 pelo Edge-TTS")
|
126 |
|
@@ -129,7 +159,7 @@ with gr.Blocks(theme=gr.themes.Default(primary_hue="green", secondary_hue="blue"
|
|
129 |
audio_input = gr.Textbox(label="Texto (Acho que o limite é 250 caracteres)", value='Texto de exemplo!', interactive=True)
|
130 |
voice_model_input = gr.Dropdown(['Arnold', 'Antoni','Bella', 'Rachel', 'Drew', 'Clyde', 'Paul' ], label="Modelo de Voz", value="Arnold")
|
131 |
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")
|
132 |
-
audio_output = gr.Audio(label="
|
133 |
elevenlabs_button = gr.Button(value="Falar")
|
134 |
elevenlabs_button.click(fn=generate_audio_elevenlabsfree, inputs=[audio_input, voice_model_input], outputs=[audio_output])
|
135 |
clear_button = gr.ClearButton(audio_input, value='Limpar')
|
|
|
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):
|
|
|
|
|
|
|
23 |
if velocidade >= 0:
|
24 |
rate_str = f"+{velocidade}%"
|
25 |
else:
|
|
|
48 |
|
49 |
return wav_output_file # Retorna o caminho completo do arquivo de áudio WAV
|
50 |
|
51 |
+
def remove_silence(input_file, output_file):
|
52 |
+
audio = AudioSegment.from_wav(input_file)
|
53 |
+
|
54 |
+
# Encontra os segmentos de áudio que não são silêncio
|
55 |
+
segments = split_on_silence(audio, min_silence_len=500, silence_thresh=-40)
|
56 |
+
|
57 |
+
# Concatena os segmentos de áudio não silenciosos
|
58 |
+
non_silent_audio = AudioSegment.silent(duration=0)
|
59 |
+
for segment in segments:
|
60 |
+
non_silent_audio += segment
|
61 |
+
|
62 |
+
# Salva o áudio sem as partes de silêncio
|
63 |
+
non_silent_audio.export(output_file, format="wav")
|
64 |
+
|
65 |
+
def controlador_generate_audio(audio_input, voice_model_input, speed_input, checkbox_cortar_silencio):
|
66 |
+
# Gerar áudio
|
67 |
+
audio_file = generate_audio(audio_input, voice_model_input, speed_input)
|
68 |
+
if audio_file:
|
69 |
+
print("Áudio gerado com sucesso:", audio_file)
|
70 |
+
# Verificar se o checkbox de cortar silêncio está marcado
|
71 |
+
if checkbox_cortar_silencio:
|
72 |
+
print("Cortando silêncio...")
|
73 |
+
# Remover silêncio do áudio
|
74 |
+
remove_silence(audio_file, audio_file)
|
75 |
+
print("Silêncio removido com sucesso!")
|
76 |
+
else:
|
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, modelo_de_voz):
|
|
|
144 |
# Defina os elementos de entrada e saída
|
145 |
audio_input = gr.Textbox(label="Texto", value='Texto de exemplo!', interactive=True)
|
146 |
voice_model_input = gr.Dropdown(SUPPORTED_VOICES, label="Modelo de Voz", value="pt-BR-AntonioNeural")
|
147 |
+
speed_input = gr.Slider(minimum=-200, maximum=200, label="Velocidade (%)", value=0, interactive=True)
|
148 |
+
checkbox_cortar_silencio = gr.Checkbox(label="Cortar Silencio", interactive=True)
|
149 |
+
audio_output = gr.Audio(label="Resultado", type="filepath", interactive=False)
|
150 |
edgetts_button = gr.Button(value="Falar")
|
151 |
+
edgetts_button.click(controlador_generate_audio, inputs=[audio_input, voice_model_input, speed_input, checkbox_cortar_silencio], outputs=[audio_output])
|
152 |
+
#edgetts_button = gr.Button(value="Falar")
|
153 |
+
#edgetts_button.click(fn=generate_audio, inputs=[audio_input, voice_model_input, speed_input], outputs=[audio_output])
|
154 |
clear_button = gr.ClearButton(audio_input, value='Limpar')
|
155 |
gr.Markdown("Agradecimentos a rany2 pelo Edge-TTS")
|
156 |
|
|
|
159 |
audio_input = gr.Textbox(label="Texto (Acho que o limite é 250 caracteres)", value='Texto de exemplo!', interactive=True)
|
160 |
voice_model_input = gr.Dropdown(['Arnold', 'Antoni','Bella', 'Rachel', 'Drew', 'Clyde', 'Paul' ], label="Modelo de Voz", value="Arnold")
|
161 |
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")
|
162 |
+
audio_output = gr.Audio(label="Resultado", type="filepath", interactive=False)
|
163 |
elevenlabs_button = gr.Button(value="Falar")
|
164 |
elevenlabs_button.click(fn=generate_audio_elevenlabsfree, inputs=[audio_input, voice_model_input], outputs=[audio_output])
|
165 |
clear_button = gr.ClearButton(audio_input, value='Limpar')
|