V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
wudicgi
V2EX  ›  分享创造

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

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

    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/

    25 条回复    2022-06-21 23:36:58 +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
    siknet
        24
    siknet  
       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!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2789 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 11:54 · PVG 19:54 · LAX 03:54 · JFK 06:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.