Kaynak Ayrımı

Open-Unmix HQ, bir stereo müzik parçasını dört bağımsız stem'e böler — vocals, drums, bass ve other. Dört bağımsız BiLSTM modeli (her stem için bir tane) karışımın STFT'si üzerinde büyüklük maskeleri üretir; isteğe bağlı bir Wiener son-filtresi bunları uzlaştırır. MLX üzerinden Apple Silicon'da çalışır.

Nedir

Mimari

Dört bağımsız stem, her biri aynı ağın bir kopyası:

AşamaŞekil / işlem
STFT4096 noktalı FFT, 1024 hop, periyodik Hann penceresi, reflect-pad. Çerçeve başına 2049 frekans bini.
Girdi normalleştirme1487 bin'e kırp (≈16 kHz), eğitimden öğrenilmiş bin başına ortalama + ölçek uygula.
EncoderLinear 2974 → 512 + BatchNorm + tanh. Girdi 2 kanal × 1487 bin.
BiLSTM3 katman, yön başına 256 hidden (etkin 512). Çerçeveler boyunca zamansal bağlamı yakalar.
DecoderEncoder ve LSTM çıktılarının skip-concat'i (1024) → Linear 1024 → 512 + BN + ReLU → Linear 512 → 4098.
Çıktı denorm + maskeKarışım büyüklüğü ile eleman-bazında çarpım; faz karışımdan; iSTFT overlap-add.
Wiener (isteğe bağlı)Dört stem tahmininin tümü üzerinde güç-oranı maskeleri. Stem'lerin karışıma toplanması için fazı iyileştirir.

Model

BileşenDeğer
Parametre / stem8.9M
Toplam parametre (4 stem)~35.6M
Örnekleme hızı44.1 kHz stereo
Parça gecikmesiÇevrimdışı (tam-parça STFT)
Ağırlıklaraufklarer/OpenUnmix-HQ-MLX (safetensors, ~136 MB)
Yukarı akışsigsep/open-unmix-pytorch (Stöter ve ark., JOSS 2019)

Hızlı başlangıç — 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")
)

En iyi kalite için wiener: true (varsayılan) iletin. Yalnızca stem'lerin bir alt kümesini çıkarmak ve diğer modelleri atlamak için targets: [.vocals] iletin.

CLI

speech separate song.wav                              # all 4 stems into song_stems/
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

Ne zaman kullanılır

Open-Unmix şu durumlarda uygundur…

…Apple Silicon üzerinde bir uygulama veya pipeline içinde hafif, çevrimdışı bir kaynak ayrımı adımına ihtiyacınız olduğunda. Stem başına 8.9M parametre, indirme boyutunu ve bellek kullanımını mütevazı tutar. Büyüklük-maskeleme artı Wiener, çoğu pop/rock içerikte iyi stem'ler verir. Stüdyo malzemesinde son teknoloji vokal izolasyonu için daha büyük Demucs/MDX-Net sınıfı bir modele başvurursunuz; bu paket, pratik, uygulamanızla birlikte gönderilebilecek tarafı hedefler.