Spaces:
Running
Running
File size: 7,786 Bytes
c4fd9bd 07a4c5d dbf3c82 07a4c5d dbf3c82 07a4c5d dbf3c82 07a4c5d dbf3c82 07a4c5d f4754c2 dbf3c82 07a4c5d e12566c |
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 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 |
import subprocess
# Comando para instalar ou atualizar o pacote elevenlabs
comando_elevenlabs = ["pip", "install", "elevenlabs", "-U", "--quiet"]
# Comando para instalar ou atualizar o pacote edge-tts
comando_edge_tts = ["pip", "install", "edge-tts", "-U", "--quiet"]
# Executando o comando para instalar ou atualizar o pacote elevenlabs
subprocess.run(comando_elevenlabs)
# Executando o comando para instalar ou atualizar o pacote edge-tts
subprocess.run(comando_edge_tts)
import subprocess
import os
import gradio as gr
from pydub import AudioSegment
from voice_map import SUPPORTED_VOICES
from pydub.silence import split_on_silence
def generate_audio(texto, modelo_de_voz, velocidade):
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
def remove_silence(input_file, output_file):
audio = AudioSegment.from_wav(input_file)
# Encontra os segmentos de áudio que não são silêncio
segments = split_on_silence(audio, min_silence_len=500, silence_thresh=-40)
# Concatena os segmentos de áudio não silenciosos
non_silent_audio = AudioSegment.silent(duration=0)
for segment in segments:
non_silent_audio += segment
# Salva o áudio sem as partes de silêncio
non_silent_audio.export(output_file, format="wav")
def controlador_generate_audio(audio_input, voice_model_input, speed_input, checkbox_cortar_silencio):
# Gerar áudio
audio_file = generate_audio(audio_input, voice_model_input, speed_input)
if audio_file:
print("Áudio gerado com sucesso:", audio_file)
# Verificar se o checkbox de cortar silêncio está marcado
if checkbox_cortar_silencio:
print("Cortando silêncio...")
# Remover silêncio do áudio
remove_silence(audio_file, audio_file)
print("Silêncio removido com sucesso!")
else:
print("Erro ao gerar áudio.")
return audio_file # Retornar o caminho do arquivo de áudio
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">
[  ](https://github.com/rafaelGodoyEbert)
</span>
<span style="margin-right: 5px">
[  ](https://twitter.com/GodoyEbert)
</span>
<span>
[  ](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, interactive=True)
checkbox_cortar_silencio = gr.Checkbox(label="Cortar Silencio", interactive=True)
audio_output = gr.Audio(label="Resultado", type="filepath", interactive=False)
edgetts_button = gr.Button(value="Falar")
edgetts_button.click(controlador_generate_audio, inputs=[audio_input, voice_model_input, speed_input, checkbox_cortar_silencio], outputs=[audio_output])
#edgetts_button = gr.Button(value="Falar")
#edgetts_button.click(fn=generate_audio, inputs=[audio_input, voice_model_input, speed_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")
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")
audio_output = gr.Audio(label="Resultado", 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) |