import os import gradio as gr from scipy.io.wavfile import write import subprocess import torch import typing as tp from audiocraft.data.audio_utils import convert_audio # Import the necessary MusicGen code here def load_model(): # Load the MusicGen model here def music_gen_and_separation(audio): # Perform music generation with the loaded MusicGen model texts = [...] # Provide the desired texts for music generation melodies = [(audio[1], audio[0])] # Convert audio to melody format for MusicGen # Perform music generation using the loaded MusicGen model generated_music = predict_full(model, texts, melodies, duration, topk, topp, temperature, cfg_coef) # Perform source separation using Demucs # Save the generated music to a temporary file temp_file = "generated_music.wav" write(temp_file, generated_music, 32000) # Run Demucs for source separation command = "python3 -m demucs.separate -n mdx_extra_q -d cpu " + temp_file + " -o out" process = subprocess.run(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) print("Demucs script output:", process.stdout.decode()) # Check if files exist before returning files = ["./out/mdx_extra_q/test/vocals.wav", "./out/mdx_extra_q/test/bass.wav", "./out/mdx_extra_q/test/drums.wav", "./out/mdx_extra_q/test/other.wav"] for file in files: if not os.path.isfile(file): print(f"File not found: {file}") else: print(f"File exists: {file}") # Convert the separated audio files to numpy arrays separated_audio = [] for file in files: _, audio = read(file) separated_audio.append(audio) return separated_audio title = "MusicGen with Demucs" description = "Combine MusicGen with Demucs for music generation and source separation." article = "

Article content goes here.

" gr.Interface( music_gen_and_separation, gr.inputs.Audio(label="Input"), [gr.outputs.Audio(label="Vocals"), gr.outputs.Audio(label="Bass"), gr.outputs.Audio(label="Drums"), gr.outputs.Audio(label="Other")], title=title, description=description, article=article ).launch()