Spleeter 是 2019 年底 Deezer 公司开源的一个可以分离人声和背景音乐的程序 (也可分离出鼓、贝斯和钢琴),效果拔群。售价 400 刀的 RX 8 软件中的 Music Rebalance 功能,用的就是 Spleeter 的模型。
一年多过去了,现在 Github 上的 Spleeter 程序,包括官方原版程序,基本还都是需要有 Python 环境或者内部包含了一个 Python 的。C++ 的几个静态库和命令行程序,不是用了 CMake 就是只支持 Linux 系统。对 Windows 平台开发者不太友好,如果是一般用户想直接使用就更不方便了。
我之前为了将 Spleeter 的功能引入到我自己的 BeatShow 程序中,写了一些代码。最近将这部分代码整理了一下,形成了一个独立的纯 C 语言编写的 Spleeter 命令行程序。
开发环境是 Visual Studio, 编译完就是一个 exe 程序,其余 dll 文件是 TensorFlow C API 和 FFmpeg 的动态库。
Github 项目地址是 https://github.com/wudicgi/SpleeterMsvcExe
根据说明直接下载 release 文件就好。models 文件比较大,如果下载速度不给力可以试试 https://ghproxy.com/
1
AllenHua 2021-05-13 08:57:33 +08:00 via iPhone
赞👍🏻
|
2
towser 2021-05-13 09:04:36 +08:00
很帅气,已 star
|
3
bbtjym 2021-05-13 10:25:16 +08:00
赞
|
4
czfandyslash 2021-05-13 10:40:21 +08:00
牛蛙!楼主是做音乐科技相关的工作吗?
|
5
wupher 2021-05-13 11:10:23 +08:00
赞!
|
6
loginv2 2021-05-13 11:35:52 +08:00
D:\SpleeterMsvcExe-1.0>D:\SpleeterMsvcExe-1.0\Spleeter.exe -m 2stems 123.mp3
Input file: 123.mp3 Output files: 123.vocals.mp3 123.accompaniment.mp3 [ 1.00%] Reading audio samples, 4814255/9628417 [ 2.00%] Reading audio samples, 9626427/9626427 [ 2.00%] Loading spleeter model, 0/1 2021-05-13 11:35:24.347021: I tensorflow/cc/saved_model/reader.cc:31] Reading SavedModel from: D:\SpleeterMsvcExe-1.0\models\2stems 2021-05-13 11:35:24.350276: I tensorflow/cc/saved_model/loader.cc:311] SavedModel load for tags { serve }; Status: fail. Took 3174 microseconds. D:\SpleeterMsvcExe-1.0> |
7
loginv2 2021-05-13 11:37:13 +08:00
解决了,是我用法问题
|
8
wudicgi OP @czfandyslash 这个是业余爱好哈,工作是嵌入式开发,在 V2 貌似属于劝退专业
业余项目 (就是上边提到的那个 BeatShow) 正好非常需要 Spleeter 的这个功能,加上音轨分离做预处理后,效果好了非常多 |
9
wudicgi OP @loginv2 因为软件更新的频率应该会大于 TensorFlow 模型文件的更新频率,所以发 release 时就单独发的
下载会麻烦一点,不过模型文件实在是太大了 |
10
bing0 2021-05-13 12:17:12 +08:00
卧槽,学好 C 真的是走遍天下。sault
|
11
czfandyslash 2021-05-13 14:24:09 +08:00
@wudicgi 好棒~ Beatshow 的软硬结合的开发也很吸引人,以前见这些 beat tracking 的方法用在 VJ 或者其他多媒体艺术中会比较多~
|
12
azenk 2021-05-13 14:54:35 +08:00 via Android 1
同嵌入式劝退行业,帮顶
|
13
ldm0 2021-05-13 18:04:24 +08:00
很强!可以二次开发嘛(
|
14
bagheer 2021-05-13 18:14:58 +08:00
有一个人, 也用这个,开发了个网站, 不但不开源,还收费, 一首歌 6 元钱
网址是 https://dango.ai/ |
17
wudicgi OP @bagheer 用 Spleeter 做这类的服务的站点不少,GitHub 上开源了的 Web 服务类型的项目都有
有人愿意付费应该还是网站做的比较易用了 |
18
xwhxbg 2021-05-13 18:41:57 +08:00
这个理论上不是 fft 一发,然后对比已有 sample 的峰值,然后过滤再 ifft 回来就行吗?理论上 MATLAB 就能做了
|
19
monkeyNik 2021-05-18 18:32:53 +08:00
已 star
我是这方面小白,顺便问下这个东西有可能做到在实时语音中分离背景噪音吗 |
20
hanguofu 2021-05-19 01:23:30 +08:00
有意思 :)嵌入式码农的知识面就是广 !
|
21
wudicgi OP @monkeyNik Github 上有一个 SpleeterRT 项目, https://github.com/james34602/SpleeterRT
我没有试过,看 release 里的说明,延迟还是有点大了 Intrinsic latency of algorithm with STFT scheme: 256 -> ((F / Lap) * T * BufFactor) / Fs -> ((4096 / 4) * 256 * 2) / 44100 -> 11.8886 secs 128 -> ((F / Lap) * T * BufFactor) / Fs -> ((4096 / 4) * 128 * 2) / 44100 -> 5.9443 secs 64 -> ((F / Lap) * T * BufFactor) / Fs -> ((4096 / 4) * 64 * 2) / 44100 -> 2.9721 secs 虽然这个项目的作者说这已经是他见过深度学习类型算法中很低的延迟了 2.9721 secs latency would be the lowest latency deep learning model-based monaural source separation algorithm I've ever seen! |
22
wudicgi OP @monkeyNik 而且 Spleeter 这个模型的用途不是去除噪音,它训练时候使用的数据集是 musDB
https://sigsep.github.io/datasets/musdb.html 数据集中每个音频文件都有这些音轨 0 - The mixture, 1 - The drums, 2 - The bass, 3 - The rest of the accompaniment, 4 - The vocals. 所以 Spleeter 模型只能把 mixture 分离为单独的 drums, bass, vocals 这些音轨 你倒是可以试试用自己的 语音-噪声 数据集训练,我在这方面了解不多,感觉降噪应该用不到这么复杂的模型 |
24
siknet 2022-06-20 16:42:10 +08:00
不错,试了下歌曲,效果很棒
|
26
badboy200600 14 天前
这个部署需要 GPU 么 GPU 的服务器可是很贵的...
|
27
wudicgi OP @badboy200600 项目自带的 tensorflow dll 是纯 CPU 的
tensorflow 有可以用 GPU 的 dll, 但在我的 5900X + RTX4070 的主机上, 用 CPU 比 GPU 还快 |
28
badboy200600 13 天前
大佬 有办法在手机本地运行么? 比如 ios 安卓 本地跑
|
29
wudicgi OP @badboy200600 这些平台你可以试试 github 上的其他项目
|