सोर्स सेपरेशन

Open-Unmix HQ एक स्टीरियो म्यूज़िक ट्रैक को चार स्वतंत्र स्टेम में बाँटता है — वोकल, ड्रम्स, बेस और अन्य। चार स्वतंत्र BiLSTM मॉडल (हर स्टेम के लिए एक) मिश्रण STFT पर मैग्निट्यूड मास्क बनाते हैं; वैकल्पिक Wiener पोस्ट-फ़िल्टर उन्हें मिलाता है। MLX के माध्यम से Apple Silicon पर चलता है।

दो इंजन उपलब्ध हैं: Open-Unmix HQ (हल्का, डिफ़ॉल्ट) और HTDemucs (Demucs v4) — एक उच्च-गुणवत्ता वाला Hybrid Transformer मॉडल जिसे --engine htdemucs से चुना जाता है। दोनों MLX के माध्यम से Apple Silicon पर चलते हैं और 44.1 kHz पर वही चार स्टेम देते हैं।

यह क्या है

आर्किटेक्चर

Four independent stems, each a copy of the same network:

StageShape / operation
STFT4096-point FFT, 1024-hop, periodic Hann window, reflect-pad. 2049 frequency bins per frame.
Input normalizeCrop to 1487 bins (≈16 kHz), apply learned per-bin mean + scale from training.
EncoderLinear 2974 → 512 + BatchNorm + tanh. Input is 2 channels × 1487 bins.
BiLSTM3 layers, 256 hidden per direction (512 effective). Captures temporal context across frames.
DecoderSkip-concat of encoder and LSTM outputs (1024) → Linear 1024 → 512 + BN + ReLU → Linear 512 → 4098.
Output denorm + maskElement-wise multiply with mixture magnitude; phase from mixture; iSTFT overlap-add.
Wiener (optional)Power-ratio masks across all 4 stem estimates. Refines phase so stems sum to mixture.

मॉडल

ComponentValue
Parameters / stem8.9M
Parameters total (4 stems)~35.6M
Sample rate44.1 kHz stereo
Chunk latencyOffline (full-track STFT)
Weightsaufklarer/OpenUnmix-HQ-MLX (safetensors, ~136 MB)
Upstreamsigsep/open-unmix-pytorch (Stöter et al., JOSS 2019)

HTDemucs (Demucs v4)

For higher separation quality — especially on bass and drums — the package also ships HTDemucs, Meta's Hybrid Transformer Demucs. It merges a spectrogram branch and a waveform branch through a cross-domain transformer; the shipped htdemucs_ft variant is a bag of four fine-tuned sub-models, one per stem. Weights download from HuggingFace on first use. On a directional MUSDB-sample benchmark (museval / BSSEval v4) it averages +3.01 dB SDR over UMX-HQ, with the biggest gains on bass (+5.75 dB).

ComponentValue
Parameters168M (4 × 42M fine-tuned sub-models)
Sample rate44.1 kHz stereo
Windowing7.8 s segments, 25% overlap, triangular cross-fade
Weightsaufklarer/HTDemucs-FT-MLX (fp16, ~320 MB)
Upstreamfacebookresearch/demucs (Rouard et al., ICASSP 2023)

त्वरित शुरुआत — Swift

import SourceSeparation
import AudioCommon

let separator = try await SourceSeparator.fromPretrained()

let stereo = try AudioFileLoader.loadStereo(
    url: URL(fileURLWithPath: "song.wav"),
    targetSampleRate: 44100
)

let stems = separator.separate(audio: stereo, sampleRate: 44100)
// stems[.vocals], stems[.drums], stems[.bass], stems[.other]
// Each is [[Float]] — left channel, right channel.

try WAVWriter.writeStereo(
    left: stems[.vocals]![0],
    right: stems[.vocals]![1],
    sampleRate: 44100,
    to: URL(fileURLWithPath: "vocals.wav")
)

Pass wiener: true (default) for best quality. Pass targets: [.vocals] to extract only a subset of stems and skip the other models.

CLI

speech separate song.wav                              # all 4 stems into song_stems/ (Open-Unmix)
speech separate song.wav --engine htdemucs            # Demucs v4 — higher quality
speech separate song.wav --engine htdemucs --htdemucs-precision int8  # smaller int8 bundle
speech separate song.wav --stems vocals               # vocals only
speech separate song.wav --stems vocals,drums         # subset
speech separate song.wav --output-dir /tmp/stems/     # custom output dir
speech separate song.wav --verbose                    # show timing

कब उपयोग करें

Open-Unmix तब फिट होता है…

…जब आपको Apple Silicon पर किसी ऐप या पाइपलाइन के भीतर हल्का, ऑफ़लाइन सोर्स-सेपरेशन पास चाहिए। प्रति स्टेम 8.9M पैरामीटर्स डाउनलोड और मेमोरी को नियंत्रित रखते हैं। अधिकांश पॉप/रॉक कंटेंट पर मैग्निट्यूड मास्किंग + Wiener अच्छे स्टेम देते हैं। स्टूडियो सामग्री पर अत्याधुनिक वोकल आइसोलेशन के लिए, --engine htdemucs के ज़रिए बंडल किए गए HTDemucs (Demucs v4) इंजन पर स्विच करें; Open-Unmix इस संतुलन के हल्के, ऐप में डाले जाने लायक छोर के रूप में बना रहता है।