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 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 = """
[ ![GitHub](https://img.shields.io/badge/github-%23121011.svg?style=for-the-badge&logo=github&logoColor=white) ](https://github.com/rafaelGodoyEbert) [ ![Twitter](https://img.shields.io/badge/Twitter-%231DA1F2.svg?style=for-the-badge&logo=Twitter&logoColor=white) ](https://twitter.com/GodoyEbert) [ ![](https://dcbadge.vercel.app/api/server/aihubbrasil) ](https://discord.gg/aihubbrasil)
""" description = """ # TTS Rápido TTS Rápido, para todos aqueles que sempre me pediam alguma forma de fazer algum TTS.
Tem em diversos idiomas, só aproveitar
Increva-se no canal do Youtube do AI HUB Brasil e no meu pessoal Godoyy """ 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") 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="Á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
Apoie o projeto pelo https://nubank.com.br/pagar/1ls6a4/0QpSSbWBSq, qualquer valor é bem vindo. """) iface.launch(share=True)