Spaces:
Running
Running
File size: 1,823 Bytes
d317550 b7fa700 d317550 b7fa700 d317550 b7fa700 d317550 b7fa700 d317550 |
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 |
# Credit to Team UVR : https://github.com/Anjok07/ultimatevocalremovergui
from typing import Optional
import soundfile as sf
import os
import torch
from uvr.models import MDX, Demucs, VrNetwork, MDXC
class MusicSeparator:
def __init__(self,
model_dir: Optional[str] = None,
output_dir: Optional[str] = None):
self.model = None
self.device = self.get_device()
self.model_dir = model_dir
self.output_dir = output_dir
def update_model(self,
model_name: str = "UVR-MDX-NET-Inst_1",
segment_size: int = 256):
self.model = MDX(name="UVR-MDX-NET-Inst_1",
other_metadata={"segment": segment_size, "split": True},
device=self.device,
logger=None,
model_path="models\UVR\MDX_Net_Models\UVR-MDX-NET-Inst_HQ_1.onnx")
def separate(self,
audio_file_path: str,
sample_rate: int = 44100,
save_file: bool = True):
if self.model is None:
self.model = self.update_model()
result = self.model(audio_file_path)
instrumental, vocals = result["instrumental"].T, result["vocals"].T
if save_file:
filename = audio_file_path
instrumental_output_path = os.path.join(self.output_dir, "instrumental", filename)
vocals_output_path = os.path.join(self.output_dir, "vocals", filename)
sf.write(instrumental_output_path, instrumental, sample_rate, format="WAV")
sf.write(vocals_output_path, vocals, sample_rate, format="WAV")
return instrumental, vocals
@staticmethod
def get_device():
return "cuda" if torch.cuda.is_available() else "cpu" |