Phân tách nguồn
Open-Unmix HQ chia một bản nhạc stereo thành bốn stem độc lập — vocals, drums, bass và other. Bốn mô hình BiLSTM độc lập (mỗi mô hình cho một stem) tạo ra các mặt nạ biên độ trên STFT của bản phối; một bộ lọc hậu xử lý Wiener tùy chọn sẽ hòa hợp chúng. Mô hình chạy trên Apple Silicon qua MLX.
Có hai engine khả dụng: Open-Unmix HQ (nhẹ, mặc định) và HTDemucs (Demucs v4) — một mô hình Hybrid Transformer chất lượng cao hơn, được chọn bằng --engine htdemucs. Cả hai đều chạy trên Apple Silicon qua MLX và xuất ra cùng bốn stem ở 44.1 kHz.
Tóm tắt
- 4 stem mỗi bản — vocals, drums, bass, other. Mỗi stem là tệp 2 kênh ở 44.1 kHz.
- Mô hình mặt nạ biên độ — mỗi mô hình stem dự đoán một mặt nạ không âm áp lên phổ của bản phối; pha lấy từ bản phối.
- Bộ lọc Wiener (tùy chọn) — tinh chỉnh mặt nạ mềm trên cả 4 stem để chúng cộng lại nhất quán thành bản phối. Tăng ~0.5 dB SDR.
- Dung lượng nhỏ — 8.9M tham số mỗi stem, tổng cộng ~136 MB cho cả 4 stem.
- Apache-2.0 — trọng số gốc theo MIT, bản chuyển đổi CoreML/MLX của chúng tôi theo Apache-2.0.
Kiến trúc
Bốn stem độc lập, mỗi cái là một bản sao của cùng một mạng:
| Giai đoạn | Hình dạng / thao tác |
|---|---|
| STFT | FFT 4096 điểm, hop 1024, cửa sổ Hann tuần hoàn, reflect-pad. 2049 bin tần số mỗi khung. |
| Chuẩn hóa đầu vào | Cắt còn 1487 bin (≈16 kHz), áp dụng trung bình và hệ số chia tỉ lệ trên từng bin đã học khi huấn luyện. |
| Encoder | Linear 2974 → 512 + BatchNorm + tanh. Đầu vào là 2 kênh × 1487 bin. |
| BiLSTM | 3 lớp, 256 hidden mỗi chiều (512 hiệu dụng). Bắt ngữ cảnh thời gian qua các khung. |
| Decoder | Skip-concat đầu ra encoder và LSTM (1024) → Linear 1024 → 512 + BN + ReLU → Linear 512 → 4098. |
| Khử chuẩn hóa đầu ra + mặt nạ | Nhân theo phần tử với biên độ bản phối; pha lấy từ bản phối; iSTFT overlap-add. |
| Wiener (tùy chọn) | Mặt nạ tỉ lệ công suất trên cả 4 ước lượng stem. Tinh chỉnh pha để các stem cộng lại thành bản phối. |
Mô hình
| Thành phần | Giá trị |
|---|---|
| Tham số / stem | 8.9M |
| Tổng tham số (4 stem) | ~35.6M |
| Tần số lấy mẫu | 44.1 kHz stereo |
| Độ trễ chunk | Offline (STFT toàn bản) |
| Trọng số | aufklarer/OpenUnmix-HQ-MLX (safetensors, ~136 MB) |
| Gốc | sigsep/open-unmix-pytorch (Stöter và cộng sự, 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).
| Component | Value |
|---|---|
| Parameters | 168M (4 × 42M fine-tuned sub-models) |
| Sample rate | 44.1 kHz stereo |
| Windowing | 7.8 s segments, 25% overlap, triangular cross-fade |
| Weights | aufklarer/HTDemucs-FT-MLX (fp16, ~320 MB) |
| Upstream | facebookresearch/demucs (Rouard et al., ICASSP 2023) |
Bắt đầu nhanh — 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")
)
Truyền wiener: true (mặc định) để có chất lượng tốt nhất. Truyền targets: [.vocals] để chỉ trích xuất một tập con các stem và bỏ qua các mô hình còn lại.
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
Khi nào nên dùng
…bạn cần một bước phân tách nguồn nhẹ, offline ngay trong ứng dụng hoặc pipeline trên Apple Silicon. 8.9M tham số mỗi stem giữ kích thước tải xuống và bộ nhớ ở mức khiêm tốn. Mặt nạ biên độ kết hợp với Wiener cho ra stem chất lượng tốt trên hầu hết nội dung pop/rock. Để cô lập giọng hát ở mức tiên tiến nhất trên tài liệu phòng thu, hãy chuyển sang engine HTDemucs (Demucs v4) đi kèm qua --engine htdemucs; Open-Unmix vẫn là đầu nhẹ, có thể nhúng vào ứng dụng của sự đánh đổi này.