فصل المصادر

يقسّم Open-Unmix HQ مقطعًا موسيقيًا ستيريو إلى أربع طبقات مستقلّة — vocals وdrums وbass وother. تنتج أربعة نماذج BiLSTM مستقلّة (واحد لكل طبقة) أقنعة بمقدار فوق STFT الخلطة؛ ويعمل مرشّح Wiener اللاحق الاختياري على التوفيق بينها. يعمل النموذج على Apple Silicon عبر MLX.

يتوفّر محرّكان: Open-Unmix HQ (خفيف، وهو الافتراضي) وHTDemucs (Demucs v4) — نموذج Hybrid Transformer أعلى جودة يُختار عبر --engine htdemucs. يعمل كلاهما على Apple Silicon عبر MLX ويُخرجان الطبقات الأربع نفسها بمعدّل 44.1 kHz.

ما هو

المعمارية

أربع طبقات مستقلّة، كلٌّ منها نسخة من الشبكة نفسها:

المرحلةالشكل / العملية
STFTFFT بـ 4096 نقطة، قفزة 1024، نافذة Hann دورية مع reflect-pad. 2049 حزمة تردّد لكل إطار.
تطبيع الدخلقصّ إلى 1487 حزمة (≈16 كيلوهرتز)، وتطبيق متوسّط ومقياس مكتسبَين لكل حزمة من التدريب.
المُرمِّزLinear 2974 → 512 + BatchNorm + tanh. الدخل قناتان × 1487 حزمة.
BiLSTM3 طبقات، 256 وحدة مخفية لكل اتجاه (512 فعليًا). يلتقط السياق الزمني عبر الإطارات.
المُفكِّكدمج تخطّي (Skip-concat) لمخرجات المُرمِّز وLSTM (1024) → Linear 1024 → 512 + BN + ReLU → Linear 512 → 4098.
إلغاء تطبيع المخرج + قناعضرب عنصري بمقدار الخلطة، طور من الخلطة، ثم iSTFT بتراكب وإضافة.
Wiener (اختياري)أقنعة نسبة قدرة عبر تقديرات الطبقات الأربع. يحسّن الطور حتى تتجمّع الطبقات لتعطي الخلطة.

النموذج

المكوّنالقيمة
المعامِلات لكل طبقة8.9 مليون
إجمالي المعامِلات (4 طبقات)~35.6 مليون
معدّل العيّنات44.1 كيلوهرتز ستيريو
زمن استجابة القطعةدون اتصال (STFT للمقطع كاملًا)
الأوزانaufklarer/OpenUnmix-HQ-MLX (safetensors، ~136 ميغابايت)
المصدر الأصليsigsep/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")
)

مرّر wiener: true (الافتراضي) للحصول على أفضل جودة. مرّر targets: [.vocals] لاستخراج مجموعة فرعية من الطبقات فقط وتخطّي بقيّة النماذج.

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.9 مليون معامِل لكل طبقة حجم التنزيل والذاكرة معتدلَين. يعطي الإخفاء بمقدار مع Wiener طبقات جيّدة في معظم محتوى البوب والروك. ولعزل صوتي بأحدث المستويات على المحتوى الاستوديوي، انتقل إلى محرّك HTDemucs (Demucs v4) المُضمَّن عبر --engine htdemucs؛ ويبقى Open-Unmix الطرف الخفيف القابل للشحن داخل تطبيقك من هذه المقايضة.