Spaces:
Runtime error
Runtime error
File size: 3,303 Bytes
fdc5f70 e05183d 87e4401 2c690c6 857db5b 87e4401 fdc5f70 779076d e05183d 857db5b fdc5f70 87e4401 779076d fdc5f70 779076d fdc5f70 e05183d 2c690c6 e05183d c3aa73a fdc5f70 e05183d fdc5f70 c3aa73a fdc5f70 2c690c6 fdc5f70 c3aa73a fdc5f70 c3aa73a e05183d fdc5f70 c3aa73a e05183d 779076d fdc5f70 e05183d fdc5f70 e05183d fdc5f70 e05183d |
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 |
#!/usr/bin/env python3
# GhostAI Music Generator for Hugging Face Spaces
import os, sys, gc, time, warnings, tempfile
import torch, torchaudio, numpy as np, gradio as gr
from pydub import AudioSegment
from audiocraft.models import MusicGen
from huggingface_hub import login
warnings.filterwarnings("ignore")
# Hugging Face token authentication
HF_TOKEN = os.getenv("HF_TOKEN")
if not HF_TOKEN:
sys.exit("ERROR: HF_TOKEN not set.")
login(HF_TOKEN)
# Simple GPU check suitable for Hugging Face
device = "cuda" if torch.cuda.is_available() else "cpu"
print(f"Running on {device.upper()}")
def clean_resources():
if device == "cuda":
torch.cuda.empty_cache()
gc.collect()
clean_resources()
# Load MusicGen model explicitly on correct device
print("Loading MusicGen 'medium' model...")
musicgen = MusicGen.get_pretrained("medium")
musicgen.lm.to(device)
musicgen.set_generation_params(duration=10)
# Core generation logic
def generate_music(prompt, cfg, top_k, top_p, temp, total_len, chunk_len, crossfade):
if not prompt.strip():
return None, "⚠️ Enter a valid prompt."
segments, sr = [], musicgen.sample_rate
chunks = max(1, total_len // chunk_len)
for _ in range(chunks):
with torch.no_grad():
audio = musicgen.generate(
[prompt],
progress=False,
temperature=temp,
cfg_coef=cfg,
top_k=top_k,
top_p=top_p,
duration=chunk_len
)[0].cpu().float()
if audio.dim() == 1:
audio = audio.unsqueeze(0).repeat(2, 1)
elif audio.shape[0] == 1:
audio = audio.repeat(2, 1)
with tempfile.NamedTemporaryFile(suffix=".wav", delete=False) as tmp:
torchaudio.save(tmp.name, audio, sr)
segment = AudioSegment.from_wav(tmp.name)
os.unlink(tmp.name)
segments.append(segment)
clean_resources()
# Concatenate audio segments
final = segments[0]
for seg in segments[1:]:
final = final.append(seg, crossfade=crossfade)
final = final[:total_len * 1000].fade_in(1000).fade_out(1000).normalize(headroom=-9.0)
out_path = "output_cleaned.mp3"
final.export(out_path, format="mp3", bitrate="128k", tags={"title": "GhostAI Track", "artist": "GhostAI"})
return out_path, "✅ Music Generation Complete!"
# Simple Gradio Interface
demo = gr.Interface(
fn=generate_music,
inputs=[
gr.Textbox(label="Instrumental Prompt"),
gr.Slider(1.0, 10.0, value=3.0, step=0.1, label="CFG Scale"),
gr.Slider(10, 500, value=250, step=10, label="Top-K"),
gr.Slider(0.0, 1.0, value=0.9, step=0.05, label="Top-P"),
gr.Slider(0.1, 2.0, value=1.0, step=0.1, label="Temperature"),
gr.Radio([30, 60, 90, 120], value=30, label="Length (seconds)"),
gr.Slider(5, 15, value=10, step=1, label="Chunk Length (seconds)"),
gr.Slider(100, 2000, value=1000, step=100, label="Crossfade (ms)")
],
outputs=[
gr.Audio(label="Generated Music", type="filepath"),
gr.Textbox(label="Status")
],
title="👻 GhostAI Music Generator",
description="Generate instrumental music using MusicGen Medium model."
)
demo.launch(share=False)
|