rosa / app.py
goedev's picture
prefer mp3 for reducing size.
3f04617
import gradio as gr
import torch
import torchaudio
import spaces
# --- 1. Load your pre-trained model ---
bundle = torchaudio.pipelines.HDEMUCS_HIGH_MUSDB_PLUS
model = bundle.get_model()
sample_rate = bundle.sample_rate
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model.to(device)
@spaces.GPU
def separate_drums(audio_path):
# a. Load audio
waveform, sr = torchaudio.load(audio_path)
# b. Resample if necessary
if sr != sample_rate:
resampler = torchaudio.transforms.Resample(orig_freq=sr, new_freq=sample_rate)
waveform = resampler(waveform)
# c. Ensure stereo
if waveform.shape[0] == 1:
waveform = waveform.repeat(2, 1)
waveform = waveform.unsqueeze(0).to(device)
# d. Perform source separation
with torch.no_grad():
separated_sources = model(waveform)
# e. Extract and save the drum track
source_names = ["drums", "bass", "other", "vocals"]
drums_index = source_names.index("drums")
drums_waveform = separated_sources[0, drums_index].cpu()
output_path = "drums_output.mp3"
torchaudio.save(output_path, drums_waveform, sample_rate)
return output_path
# --- 2. Create the Gradio Interface ---
with gr.Blocks() as iface:
gr.Markdown(
f"""
# 🥁 Drum Separator
Upload an audio file to isolate the drum track.
CUDA Enabled: **{"YES" if torch.cuda.is_available() else "NO"}**
"""
)
gr.Interface(
fn=separate_drums,
inputs=gr.Audio(type="filepath", label="Upload Your Song"),
outputs=gr.Audio(label="Isolated Drum Track"),
)
# --- 3. Launch the App ---
iface.launch()