DBS-BSRNN (DnR v2)

DBS-BSRNN separates a 44.1 kHz mono soundtrack into music, sound effects and speech. It is the BSRNN separator with Dynamic Band Splitting: the frequency boundaries of the 128 band tokens are predicted from each mixture instead of being fixed.

Paper · PDF · HF Paper · Code · Project page · Demo

Music Speech SFX Avg.
SI-SDR (dB), DnR v2 test (973 tracks) 6.48 15.01 5.73 9.07

4.7M parameters. The example uses the 3 s / 1.5 s overlap-add windows of the training recipe.

Usage

pip install git+https://github.com/JusperLee/Dynamic-Band-Splitting.git
import soundfile as sf
import torch
from dbs.engine import separate
from dbs.models import DBSBSRNN

model = DBSBSRNN.from_pretrained("JusperLee/DBS-BSRNN-DnR").eval()
audio, rate = sf.read("soundtrack.wav", dtype="float32", always_2d=True)   # 44.1 kHz
mixture = torch.from_numpy(audio.mean(1)).view(1, 1, -1)
with torch.inference_mode():
    music, sfx, speech = separate(model, mixture, {"mode": "chunked", "chunk_seconds": 3.0, "hop_seconds": 1.5}, sample_rate=44100)[0]

model(mixture, return_aux=True) also returns the predicted boundaries of each frequency region. The outputs are in the order music, sfx, speech.

Training

Trained from scratch on the DnR v2 training set with configs/dnr/dbs_bsrnn.yaml.

Citation

@misc{zhang2026dbs,
  title         = {Learning Where to Split: Dynamic Band Splitting for Audio Source Separation},
  author        = {Zhang, Bingzhe and Li, Kai and Hu, Xiaolin},
  year          = {2026},
  eprint        = {2610.14993},
  archivePrefix = {arXiv},
  primaryClass  = {cs.SD},
  doi           = {10.48550/arXiv.2610.14993},
  url           = {https://arxiv.org/abs/2610.14993}
}
Downloads last month
1,164
Safetensors
Model size
4.71M params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Space using JusperLee/DBS-BSRNN-DnR 1

Paper for JusperLee/DBS-BSRNN-DnR