多说话人语音分离工具包。 以 NumPy 为内核,离线优先,聚焦置换不变训练(PIT)、 时频掩蔽 / 时域重建,以及分离质量评估。可选 PyTorch 后端提供可微分的 PIT 损失。
设计初衷:把语音分离里那些反复要用、又容易写错的部件——STFT 的完美重建、 理想掩蔽、SI-SDR / bss_eval、PIT 的最优置换——做成一套可复现、零重型依赖的 参考实现。核心只依赖 NumPy,装完即可离线跑通全部示例,无需任何数据集或 GPU。
- 信号处理内核:STFT / iSTFT,满足 COLA 的加权重叠相加,数值意义上的完美重建。
- 理想时频掩蔽:IBM、IRM、维纳、相位敏感掩蔽(PSM)、复数比值掩蔽(cIRM)。
- oracle 分离器:用真实源构造理想掩蔽,给出分离质量的上界(研究/评估基线)。
- 置换不变训练:逐对指标矩阵 + 最优置换求解(小规模枚举,大规模纯 NumPy 匈牙利算法)。
- 分离质量评估:SI-SDR、SI-SDRi、尺度相关 SNR,以及 bss_eval 风格的 SDR / SIR / SAR。
- 离线数据合成:正弦 / 谐波 / 扫频 / 噪声与按目标 SNR 的多源混合,示例无需外部数据。
- 可选 PyTorch 后端:可微分的置换不变 SI-SDR 损失,可直接用于训练分离网络。
- 命令行工具:
sepkit simulate/sepkit evaluate/sepkit info。
pip install sepkit # 仅核心(NumPy)
pip install "sepkit[torch]" # 附带 PyTorch 后端从源码安装:
git clone https://github.com/ethan-long71/sepkit.git
cd sepkit
pip install -e ".[dev]"import numpy as np
from sepkit import mix_sources, OracleTFMaskSeparator, evaluate_separation
from sepkit.simulation import harmonic, tone
# 1) 合成一个双说话人场景(无需任何数据集)
a = harmonic(180.0, n_harmonics=6, duration=1.0) # “说话人 A”
b = tone(1200.0, duration=1.0) # “说话人 B”
scene = mix_sources(np.stack([a, b]), snr_db=0.0)
# 2) 用理想比值掩蔽做 oracle 分离
sep = OracleTFMaskSeparator(scene.sources, mask="irm", n_fft=512, hop_length=128)
estimates = sep.separate(scene.mixture).sources
# 3) 在最优置换下评估分离质量
report = evaluate_separation(estimates, scene.sources, mixture=scene.mixture)
print("SI-SDRi:", report.mean_si_sdri, "dB")命令行:
sepkit simulate --out mix.wav --duration 2.0 --snr 0
sepkit info- docs/architecture.md —— 模块划分与数据流
- docs/usage.md —— 使用指南与常见配方
- docs/design-notes.md —— 设计取舍与算法说明
- docs/api-reference.md —— 公共 API 速查
- examples/ —— 可直接运行的示例脚本
MIT © Xu Beihan