import gradio as gr from audiocraft.models import MusicGen, AudioGen from audiocraft.data.audio import audio_write import os import torch # Verificar dispositivo device = "cuda" if torch.cuda.is_available() else "cpu" print(f"Usando dispositivo: {device}") # Carregar modelos corretamente try: # Não usamos .to(device) aqui - o AudioCraft cuida disso internamente musicgen = MusicGen.get_pretrained('facebook/musicgen-small') audiogen = AudioGen.get_pretrained('facebook/audiogen-medium') # Configurar parâmetros de geração musicgen.set_generation_params(duration=5) audiogen.set_generation_params(duration=5) except Exception as e: print(f"Erro ao carregar modelos: {e}") raise def generate_audio(prompt, model, model_type): try: # Caso 1: Se vier da API (JSON com lista), pega o primeiro item if isinstance(prompt, list): prompt = prompt[0] print(f"Gerando {model_type} para:", prompt) wav = model.generate([prompt])[0] # Gera o áudio # Diretório para salvar os arquivos temp_dir = "generated_audio" os.makedirs(temp_dir, exist_ok=True) # Caminho do arquivo output_path = os.path.join(temp_dir, f"{model_type}_{hash(prompt)}.wav") # Salvar o áudio audio_write( output_path[:-4], # Remove a extensão .wav wav.cpu(), # Garante que está na CPU para salvar model.sample_rate, strategy="loudness", loudness_compressor=True ) print(f"Áudio gerado com sucesso em: {output_path}") return output_path except Exception as e: print(f"Erro ao gerar áudio: {e}") raise gr.Error(f"Falha na geração: {str(e)}") def generate_music(prompt): return generate_audio(prompt, musicgen, "música") def generate_sound_effect(prompt): return generate_audio(prompt, audiogen, "efeito sonoro") # Configuração da interface with gr.Blocks() as demo: gr.Markdown("# 🎵 Gerador de Áudio com MusicGen e AudioGen") with gr.Tabs(): with gr.TabItem("MusicGen 🎵"): gr.Markdown("## Gerar Música") with gr.Row(): music_input = gr.Text(label="Descreva a música que deseja") music_output = gr.Audio(label="Música Gerada", type="filepath") music_button = gr.Button("Gerar Música") music_button.click(fn=generate_music, inputs=music_input, outputs=music_output) with gr.TabItem("AudioGen 🔊"): gr.Markdown("## Gerar Efeitos Sonoros") with gr.Row(): sound_input = gr.Text(label="Descreva o efeito sonoro que deseja") sound_output = gr.Audio(label="Som Gerado", type="filepath") sound_button = gr.Button("Gerar Som") sound_button.click(fn=generate_sound_effect, inputs=sound_input, outputs=sound_output) if __name__ == "__main__": demo.launch()