写了一个纯 C 语言版本的 Spleeter 人声、伴奏分离命令行程序,绿色软件直接运行,不需要 Python - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
wudicgi
V2EX    分享创造

写了一个纯 C 语言版本的 Spleeter 人声、伴奏分离命令行程序,绿色软件直接运行,不需要 Python

  •  5
     
  •   wudicgi
    wudicgi 2021-05-13 08:51:42 +08:00 5243 次点击
    这是一个创建于 1611 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 的动态库。

    Release 文件列表

    Github 项目地址是 https://github.com/wudicgi/SpleeterMsvcExe

    根据说明直接下载 release 文件就好。models 文件比较大,如果下载速度不给力可以试试 https://ghproxy.com/

    29 条回复    2024-12-09 09:32:16 +08:00
    AllenHua
        1
    AllenHua  
       2021-05-13 08:57:33 +08:00 via iPhone
    towser
        2
    towser  
       2021-05-13 09:04:36 +08:00
    很帅气,已 star
    bbtjym
        3
    bbtjym  
       2021-05-13 10:25:16 +08:00
    czfandyslash
        4
    czfandyslash  
       2021-05-13 10:40:21 +08:00
    牛蛙!楼主是做音乐科技相关的工作吗?
    wupher
        5
    wupher  
       2021-05-13 11:10:23 +08:00
    赞!
    loginv2
        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>
    loginv2
        7
    loginv2  
       2021-05-13 11:37:13 +08:00
    解决了,是我用法问题
    wudicgi
        8
    wudicgi  
    OP
       2021-05-13 12:03:16 +08:00
    @czfandyslash 这个是业余爱好哈,工作是嵌入式开发,在 V2 貌似属于劝退专业

    业余项目 (就是上边提到的那个 BeatShow) 正好非常需要 Spleeter 的这个功能,加上音轨分离做预处理后,效果好了非常多
    wudicgi
        9
    wudicgi  
    OP
       2021-05-13 12:06:35 +08:00   1
    @loginv2 因为软件更新的频率应该会大于 TensorFlow 模型文件的更新频率,所以发 release 时就单独发的
    下载会麻烦一点,不过模型文件实在是太大了
    bing0
        10
    bing0  
       2021-05-13 12:17:12 +08:00
    卧槽,学好 C 真的是走遍天下。sault
    czfandyslash
        11
    czfandyslash  
       2021-05-13 14:24:09 +08:00
    @wudicgi 好棒~ Beatshow 的软硬结合的开发也很吸引人,以前见这些 beat tracking 的方法用在 VJ 或者其他多媒体艺术中会比较多~
    azenk
        12
    azenk  
       2021-05-13 14:54:35 +08:00 via Android   1
    同嵌入式劝退行业,帮顶
    ldm0
        13
    ldm0  
       2021-05-13 18:04:24 +08:00
    很强!可以二次开发嘛(
    bagheer
        14
    bagheer  
       2021-05-13 18:14:58 +08:00
    有一个人, 也用这个,开发了个网站, 不但不开源,还收费, 一首歌 6 元钱
    网址是 https://dango.ai/
    bagheer
        15
    bagheer  
       2021-05-13 18:16:59 +08:00
    @bagheer 噢,看了一下,Spleeter 是 MIT 协议的,没事了.
    wudicgi
        16
    wudicgi  
    OP
       2021-05-13 18:18:40 +08:00
    @ldm0 用的和 spleeter 官方项目一样的 MIT 协议,应该都比较宽松了
    wudicgi
        17
    wudicgi  
    OP
       2021-05-13 18:20:15 +08:00
    @bagheer 用 Spleeter 做这类的服务的站点不少,GitHub 上开源了的 Web 服务类型的项目都有
    有人愿意付费应该还是网站做的比较易用了
    xwhxbg
        18
    xwhxbg  
       2021-05-13 18:41:57 +08:00
    这个理论上不是 fft 一发,然后对比已有 sample 的峰值,然后过滤再 ifft 回来就行吗?理论上 MATLAB 就能做了
    monkeyNik
        19
    monkeyNik  
       2021-05-18 18:32:53 +08:00
    已 star
    我是这方面小白,顺便问下这个东西有可能做到在实时语音中分离背景噪音吗
    hanguofu
        20
    hanguofu  
       2021-05-19 01:23:30 +08:00
    有意思 :)嵌入式码农的知识面就是广 !
    wudicgi
        21
    wudicgi  
    OP
       2021-05-19 10:10:05 +08:00
    @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!
    wudicgi
        22
    wudicgi  
    OP
       2021-05-19 10:16:58 +08:00
    @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 这些音轨

    你倒是可以试试用自己的 语音-噪声 数据集训练,我在这方面了解不多,感觉降噪应该用不到这么复杂的模型
    longbye0
        23
    longbye0  
       2021-05-26 00:32:42 +08:00
    @monkeyNik rnnoise
    Hansah
        24
    Hansah  
       2022-06-20 16:42:10 +08:00
    不错,试了下歌曲,效果很棒
    chasb
        25
    chasb  
       2022-06-21 23:36:58 +08:00
    @wudicgi audio engineer in LA.... Nice done!
    badboy200600
        26
    badboy200600  
       308 天前
    这个部署需要 GPU 么 GPU 的服务器可是很贵的...
    wudicgi
        27
    wudicgi  
    OP
       308 天前
    @badboy200600 项目自带的 tensorflow dll 是纯 CPU 的
    tensorflow 有可以用 GPU 的 dll, 但在我的 5900X + RTX4070 的主机上, 用 CPU 比 GPU 还快
    badboy200600
        28
    badboy200600  
       307 天前
    大佬 有办法在手机本地运行么? 比如 ios 安卓 本地跑
    wudicgi
        29
    wudicgi  
    OP
       305 天前
    @badboy200600 这些平台你可以试试 github 上的其他项目
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2667 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 15:07 PVG 23:07 LAX 08:07 JFK 11:07
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86