2midi4lin,适配米哈游「林离」的钢琴 MIDI 工具

**🎹 适配米哈游「林离」的钢琴 MIDI 工具**

这篇帖子算是一份开发分享。灵感源于我做的一个开源小工具 2midi4lin:把任意音频或视频链接转成钢琴独奏 MIDI,适配林离使用。写这篇介绍的过程中,也借助了 AI 帮忙整理思路,希望能给大家带来一些启发,也欢迎提出建议。

:clapper_board: 演示视频(2 分钟):一键音频转钢琴midi工具,让林离更简单的弹琴

这个工具是干嘛的

经常在林离里找 MIDI 播,但很多喜欢的歌没有现成的谱子。2midi4lin 就是解决这个问题的:拖入一首歌,或者粘贴一个 B站/YouTube 视频链接,它自动转成钢琴独奏 MIDI,转完直接喂给林离播放,还能一键分享到作品集。

能做什么

  • 音频转录:拖入或选择 mp3 / wav / flac / m4a → 钢琴 MIDI
  • 视频转 MIDI:粘贴 B站 / YouTube 链接,自动完成下载 → 转换 → 转录
  • 两种模式
  • :bullseye: 忠实转录:严格还原原曲实际弹奏的音符,适合钢琴独奏原曲
  • 🎹 翻奏改编:按钢琴风格重新编排,适合流行歌、混音原曲
  • 三档风格:轻柔 / 标准 / 华丽,控制音符密度和力度
  • 适配度分析:转录前先分析,评估这首音频转钢琴的适配度(1~5 星),省得白等
  • 钢琴谱下载:内置多源搜索(BitMidi、FreeMIDI 等,FreeMIDI 就有 15 万+ 文件),也支持粘贴 MuseScore 乐谱链接直接下载
  • GPU 加速:内置 DirectML,有显卡自动加速(实测 30 秒音频 23 秒 → 2.5 秒),没显卡回退 CPU,结果一致

怎么用

GitHub 下载 exe,模型和 ffmpeg 都内置了,不需要装任何东西:

text

https://github.com/kishin123/2midi4lin/releases

分享到林离的完整流程:

  1. 拖入音频 → 选「翻奏改编」→ 开始转录
  2. 完成后弹分享窗 →「打开成品文件夹」找到 .mid
  3. 用林离打开这个 MIDI 播放 → 播放页面上能看到分享码(形如 L35X0G
  4. 把分享码填回软件 → 提交分享 → 作品展示在作品集 2midi4lin.kesug.com

全程不到 3 分钟。

模型技术路线

简单交代一下模型是怎么来的,这部分我写得比较详细:

  • 任务本质:这不是普通音乐转录(识别音频里有什么音符),而是自动钢琴改编——理解音乐结构后编成适合钢琴弹的版本。任务定义来自论文 AMT-APC(arXiv 2409.14086)
  • 模型来源:翻奏改编基于 AMT-APC(武藏野大学 Komiya 2024,MIT 开源)微调,架构是索尼的 hFT-Transformer(ISMIR 2023);忠实转录链路直接用 hFT-Transformer。都是公开发表、开源的模型
  • 参数与数据:约 5.8M 参数,ONNX 单文件约 22MB;MAESTRO 古典钢琴预训练 + 1267 首 YouTube 钢琴 cover 微调;三档风格由 24 维风格向量控制
  • 部署:双 ONNX 模型内嵌,纯 numpy 计算 mel 谱,无 torch 依赖;推理走 onnxruntime + DirectML,不需要装 CUDA
  • 调过的一个坑:DirectML 不支持模型的动态尺寸计算,一开始一跑就崩。用 onnxsim 做了 shape 静态化(动态维度固定成常量)解决,速度也顺带提了 9 倍
  • 诚实说明局限:训练数据以钢琴和流行歌为主,钢琴独奏和流行歌效果最好;交响乐/管弦乐效果有限——这是所有钢琴改编模型的共同天花板(88 个键装不下一整个管弦乐队),不是软件问题

开发小记

这项目能走到发布,有两件事帮了大忙:

林离 28 号的 MIDI 兼容性优化。之前最头疼的是长音怎么保留——MIDI 里长音处理不好,要么延音丢掉听着干瘪,要么超出规范在林离里加载出问题。那段时间几乎每天拿 3 首曲子来回调,就为了「保留得更好」和「合法」两头都占。林离更新兼容性之后这问题一下子轻了,配套工具的开发省了大力气。

ds4flash 正式版也很给力。比起预览版,思考链持久很多,能自主把一个技术问题啃很久,很多排查和方案推演都是它帮着做的(比如上面那个 DirectML 静态化的坑)。

开源

MIT 协议开源,代码在 GitHub kishin123/2midi4lin。有任何问题欢迎留言或提 issue。

10 个赞

可以可以,之前找的一堆虽然效果缺失强但是全要钱,还是自己找到个 21 年字节的项目 https://github.com/bytedance/piano_transcription 说实在挺一般的,也就比免费的在线转换强一点,全靠 ai 在生成的 midi 上修正成能弹的样子 :ys_akf_008: