stems-mdx / README.md
arraypress's picture
MDX23C InstVoc HQ as a float16 Core AI asset
c458101 verified
|
Raw History Blame Contribute Delete
2.35 kB
metadata
license: mit
pipeline_tag: audio-to-audio
tags:
  - source-separation
  - vocal-separation
  - mdx23c
  - core-ai
  - apple-silicon

MDX23C InstVoc HQ — Core AI (float16)

Vocal / instrumental separation for Apple silicon: MDX23C-8KFFT-InstVoc_HQ converted to a Core AI asset (stems-mdx23c-instvoc-float16.aimodel, 214 MB) for on-device use from Swift.

Credit

This repository only converts those weights; all credit for the model belongs to them.

What the asset computes

The network between the spectrogram and the stem spectrograms — the STFT, chunking and inverse STFT run in the host:

  • input spec [1, 4, 4096, 256] float32 — left re, left im, right re, right im; bins 0–4095 of an STFT with n_fft 8192, hop 1024, periodic Hann, centred; one chunk is 261,120 samples at 44.1 kHz.
  • output stems [1, 8, 4096, 256] float32 — vocals (4 channels), then instrumental.

Weights and arithmetic are float16 behind float32 input and output.

Measured (macOS 27, Apple silicon)

this asset float32 export 8-bit Core ML package
one chunk vs PyTorch float32 62.6 dB 123.9 dB 35.3 dB
time per chunk (GPU) 0.27 s 0.31 s 0.74 s
a 30 s mix, end to end 3.0 s 3.5 s 6.9 s

On three 30-second mixes with a known vocal, all three scored the same vocal and instrumental SDR to within 0.01 dB. Repeated runs are bit-for-bit identical. The export asserts the converted network equals upstream's model(chunk) exactly before saving.

Use

With stems, which fetches this on first use:

stems song.mp3        # song-vocal.wav + song-instrumental.wav

From Swift, with swift-vocal-isolation:

let separator = try await MDXSeparator(contentsOf: assetURL)
let stems = try await separator.separate(contentsOf: songURL)

Converted with Tools/export_mdx.py --precision float16 in swift-vocal-isolation.