Spaces:
Runtime error
Runtime error
File size: 3,125 Bytes
ed0dbc1 d2d09cc 1381c8e d2d09cc 8b4b52c ed0dbc1 243993a eed21cc ed0dbc1 0c24b94 9e2fa56 eed21cc ed0dbc1 b1094d4 9e2fa56 eed21cc 9e2fa56 ed0dbc1 eed21cc ac307eb eed21cc c9f6306 eed21cc ed0dbc1 eed21cc ed0dbc1 eed21cc ed0dbc1 eed21cc ed0dbc1 eed21cc 04736e7 ed0dbc1 eed21cc 8b4b52c 7ab6d17 eed21cc 7ab6d17 eed21cc 7ab6d17 eed21cc 7ab6d17 b1094d4 |
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 |
import spaces
import gradio as gr
import torchaudio
from audiocraft.models import MusicGen
from audiocraft.data.audio import audio_write
import logging
import os
import uuid
from torch.cuda.amp import autocast
import torch
# Configura el logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
# Limitar el uso de memoria de la GPU
torch.cuda.set_per_process_memory_fraction(0.8)
# Cargar el modelo preentrenado
logging.info("Cargando el modelo preentrenado.")
model = MusicGen.get_pretrained('nateraw/musicgen-songstarter-v0.2')
@spaces.GPU(duration=120)
def generar_musica(descripcion, melodia_audio, duracion):
# Limpiar la caché de la GPU antes de generar
torch.cuda.empty_cache()
torch.cuda.synchronize()
with autocast():
logging.info("Iniciando la generación de música.")
model.set_generation_params(duration=duracion)
if descripcion:
descripcion = [descripcion]
if melodia_audio:
logging.info(f"Cargando la melodía de audio desde: {melodia_audio}")
melodia, sr = torchaudio.load(melodia_audio)
logging.info("Generando música con descripción y melodía.")
wav = model.generate_with_chroma(descripcion, melodia[None], sr)
else:
logging.info("Generando música solo con descripción.")
wav = model.generate(descripcion)
else:
logging.info("Generando música de manera incondicional.")
wav = model.generate_unconditional(1)
filename = f'{str(uuid.uuid4())}.wav'
logging.info(f"Guardando la música generada con el nombre: {filename}")
path = audio_write(filename, wav[0].cpu().to(torch.float32), model.sample_rate, strategy="loudness", loudness_compressor=True)
print("Música guardada en", path, ".")
# Verifica la forma del tensor de audio generado y si fue guardado correctamente
logging.info(f"La forma del tensor de audio generado: {wav[0].shape}")
logging.info("Música generada y guardada con éxito.")
if not os.path.exists(path):
raise ValueError(f'No se pudo guardar el audio en {path}')
return path
# Definir la interfaz Gradio
descripcion = gr.Textbox(label="Descripción", placeholder="acústico, guitarra, melodía, trap, re menor, 90 bpm")
melodia_audio = gr.Audio(label="Melodía de audio (opcional)", type="filepath")
duracion = gr.Slider(label="Duración (segundos)", minimum=10, maximum=600, step=10, value=30) # Máximo 10 minutos (600 segundos)
output_path = gr.Audio(label="Música generada", type="filepath")
gr.Interface(
fn=generar_musica,
inputs=[descripcion, melodia_audio, duracion],
outputs=output_path,
title="Generador de Música",
description="Genera música utilizando el modelo MusicGen.",
examples=[
["trap, sintetizador, songstarters, oscuro, G# menor, 140 bpm", "./assets/kalhonaho.mp3", 30],
["alegre, electrónica, sintetizador, dance, 120 bpm", None, 60]
]
).launch()
|