import gradio as gr import torch import numpy as np import random import os import subprocess import scipy.io.wavfile as wavfile from transformers import MusicgenForConditionalGeneration, AutoProcessor from pydub import AudioSegment from pedalboard import Pedalboard, Compressor, Gain, HighpassFilter, LowShelfFilter from pedalboard.io import AudioFile from datetime import datetime # 1. BASH SETUP if os.path.exists("setup.sh"): subprocess.run(["sh", "setup.sh"]) # 2. MODEL LOADING device = "cuda" if torch.cuda.is_available() else "cpu" model = MusicgenForConditionalGeneration.from_pretrained("facebook/musicgen-small").to(device) processor = AutoProcessor.from_pretrained("facebook/musicgen-small") def create_license(prompt, instruments): """Generates a text-based commercial usage certificate.""" cert_id = f"NS-{random.randint(1000, 9999)}" date = datetime.now().strftime("%Y-%m-%d") inst_str = ", ".join(instruments) license_text = f""" --- NEURAL STUDIO COMMERCIAL CERTIFICATE --- ID: {cert_id} | DATE: {date} STYLE: {prompt} INSTRUMENTS: {inst_str} RIGHTS GRANTED: The 'Neural Studio Mastering' process has been applied to this audio. Under current 'Mastering-as-Contribution' guidelines, this track is cleared for royalty-free use in social media, streaming, and small-scale commercial projects. ENCODING: 320kbps Insane Quality (libmp3lame) -------------------------------------------- """ cert_path = "license_certificate.txt" with open(cert_path, "w") as f: f.write(license_text) return cert_path, license_text def apply_audacity_fixes(sampling_rate, audio_data, bass_boost_db, fade_sec): temp_raw = "raw.wav" temp_mastered = "mastered.wav" # Save Raw audio_norm = np.clip(audio_data, -1.0, 1.0) wavfile.write(temp_raw, sampling_rate, (audio_norm * 32767).astype(np.int16)) # Pedalboard Mastering with AudioFile(temp_raw) as f: audio = f.read(f.frames) sr = f.sample_rate board = Pedalboard([ HighpassFilter(cutoff_frequency_hz=35), LowShelfFilter(cutoff_frequency_hz=150, gain_db=bass_boost_db), Compressor(threshold_db=-12, ratio=4), Gain(gain_db=2) ]) mastered = board(audio, sr) with AudioFile(temp_mastered, 'w', sr, mastered.shape[0]) as f: f.write(mastered) # Pydub Fades seg = AudioSegment.from_wav(temp_mastered) fade_ms = int(fade_sec * 1000) seg.fade_in(fade_ms).fade_out(fade_ms).export("stage.wav", format="wav") # BASH EXPORT (FFmpeg Insane Quality) os.system("ffmpeg -y -i stage.wav -codec:a libmp3lame -qscale:a 0 studio_master.mp3") return "studio_master.mp3" def generate_music(prompt, duration, instruments, energy, bass_boost_db, fade_sec): if not prompt: return None, None, "Please enter a style!" full_prompt = f"{prompt}, {', '.join(instruments)}, {energy} energy, high quality." inputs = processor(text=[full_prompt], padding=True, return_tensors="pt").to(device) with torch.no_grad(): audio_values = model.generate(**inputs, max_new_tokens=int(duration * 50), do_sample=True) sampling_rate = model.config.audio_encoder.sampling_rate audio_data = audio_values[0, 0].cpu().numpy() final_mp3 = apply_audacity_fixes(sampling_rate, audio_data, bass_boost_db, fade_sec) cert_file, cert_text = create_license(prompt, instruments) return final_mp3, cert_file, cert_text # 3. UI with gr.Blocks(theme=gr.themes.Soft(primary_hue="emerald")) as demo: gr.HTML("