Spaces:
Runtime error
Runtime error
File size: 3,067 Bytes
f6b5617 8b98250 f6b5617 5766834 97c9772 5766834 97c9772 f6b5617 5766834 97c9772 5766834 49ced47 5766834 97c9772 f6b5617 5766834 97c9772 a9fcc46 5766834 97c9772 5766834 8b98250 97c9772 8b98250 97c9772 f6b5617 97c9772 f6b5617 97c9772 |
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 |
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() |