NeuralNote
NeuralNote 是一款音频插件,将最先进的音频转 MIDI 转换技术引入您喜爱的数字音频工作站。
- 适用于任何音调乐器(包括人声)
- 支持复音转录
- 支持弯音检测
- 轻量级且转录速度极快
- 允许在聆听转录结果的同时调整参数
- 允许直接在插件中缩放和时间量化转录后的 MIDI
安装 NeuralNote
在这里下载适合您平台的最新版本(支持 Windows 和 macOS(通用))!
目前仅提供原始的 .vst3、.component(Audio Unit)、.app 和 .exe(独立版)文件。安装程序将很快推出。同时,您可以手动将插件/应用程序文件复制到适当的目录中。macOS 上的代码已签名,但 Windows 上尚未签名,因此您可能需要执行一些额外步骤才能在 Windows 上使用 NeuralNote。
使用方法
NeuralNote 是一款简单的音频效果插件(VST3/AU/独立应用程序),可应用于需要转录的音轨。
使用流程非常简单:
- 获取音频
- 点击录音。可在实时录音或在 DAW 中播放音轨时使用。
- 或将音频文件拖放到插件上。(支持 .wav、.aiff、.flac、.mp3 和 .ogg(vorbis)格式)
- MIDI 转录结果立即显示在钢琴卷帘区域。
- 点击播放按钮聆听结果。
- 调整不同设置以优化转录结果,甚至可以在聆听过程中进行调整
- 单独调节源音频和合成转录的音量
- 满意后,只需将 MIDI 转录结果从插件拖放到 MIDI 音轨即可导出。
观看我们为神经音频插件竞赛制作的演示视频。
NeuralNote 内部使用 Spotify 的 basic-pitch 模型。有关更多信息,请参阅他们的博客文章和论文。在 NeuralNote 中,basic-pitch 使用 RTNeural 处理 CNN 部分,使用 ONNXRuntime 处理特征部分(恒 Q 变换计算 + 谐波叠加)。作为该项目的一部分,我们为 RTNeural 贡献了代码以添加 2D 卷积支持。
从源代码构建
要求:git
、cmake
和您操作系统首选的编译器套件。
克隆时使用以下命令:
git clone --recurse-submodules --shallow-submodules https://github.com/DamRsn/NeuralNote
在能够将项目作为普通 CMake 项目使用之前,必须至少执行一次以下特定操作系统的构建脚本。该脚本在调用 CMake 之前下载 onnxruntime 静态库(我们使用 ort-builder 创建)。
macOS
$ ./build.sh
Windows
由于已知问题,如果您没有使用 Visual Studio 2022(MSVC 版本:19.35.x,检查 cl
输出),则需要手动构建 onnxruntime.lib,步骤如下:
-
确保已安装 Python;如果未安装,请在 https://www.python.org/downloads/windows/ 下载(目前不支持 Python 3.11,请选择 Python 3.10)。
-
在命令提示符中执行以下每一行命令:
git clone --depth 1 --recurse-submodules --shallow-submodules https://github.com/tiborvass/libonnxruntime-neuralnote ThirdParty\onnxruntime
cd ThirdParty\onnxruntime
python3 -m venv venv
.\venv\Scripts\activate.bat
pip install -r requirements.txt
.\convert-model-to-ort.bat model.onnx
.\build-win.bat model.required_operators_and_types.with_runtime_opt.config
copy model.with_runtime_opt.ort ..\..\Lib\ModelData\features_model.ort
cd ..\..
现在你可以按照以下方式继续构建NeuralNote:
> .\build.bat
集成开发环境(IDE)
一旦构建脚本至少执行过一次,你就可以在你喜欢的IDE(CLion/Visual Studio/VSCode等)中加载这个项目,并点击其中一个目标的"构建"按钮。
重用NeuralNote的转录引擎代码
所有用于执行转录的代码都在Lib/Model
中,所有模型权重都在Lib/ModelData/
中。欢迎在你自己的项目中只使用这部分代码!我们将来会尝试将其与仓库的其他部分进一步隔离,并将其制作成一个库。
目前,生成Lib/ModelData/
中文件的代码尚不可用,因为它需要很多手动操作。但以下是我们创建这些文件所遵循的过程描述:
features_model.onnx
是通过使用tf2onnx
转换只包含完整basic-pitch图中CQT + Harmonic Stacking部分的keras模型生成的(手动添加了批量归一化的权重)。- 包含basic-pitch cnn权重的
.json
文件是从basic-pitch-ts仓库中可用的tensorflow-js模型生成的,然后用tf2onnx
转换为onnx。最后,通过Netron手动收集权重到.npy
文件,并最终应用到使用basic-pitch代码创建的拆分keras模型中。
原始的basic-pitch CNN被拆分成4个串联的模型,它们可以通过RTNeural运行。
路线图
- 提高稳定性
- 正确保存插件的内部状态,以便在重新进入会话时可以加载回来。使参数对DAW可见。
- 添加工具提示
- 使内部合成器支持音高弯音
- 从插件发送MIDI输出,以便路由到另一个乐器
错误报告和功能请求
如果你有任何关于插件的请求/建议或遇到了bug,请提交GitHub issue。
贡献
非常欢迎贡献!如果你想为插件添加一些功能或只是改进文档,请开启一个PR!
许可证
NeuralNote软件和代码根据Apache-2.0许可证发布。请参阅许可证文件。
使用的第三方库及其许可证
以下是NeuralNote中使用的所有第三方库及其使用的许可证列表。
- JUCE(JUCE个人版)
- RTNeural(BSD-3-Clause许可证)
- ONNXRuntime(MIT许可证)
- ort-builder(MIT许可证)
- basic-pitch(Apache-2.0许可证)
- basic-pitch-ts(Apache-2.0许可证)
- minimp3(CC0-1.0许可证)
NeuralNote能实时转录音频吗?
不幸的是不能,原因如下:
- Basic Pitch使用常数Q变换(CQT)作为输入特征。CQT需要非常长的音频块(>1秒)来获取最低频率区间的振幅。这使得延迟太高,无法进行实时转录。
- Basic Pitch CNN还有约120毫秒的额外延迟。
- 音符事件创建算法从后向前(从未来到过去)处理后验图,因此是非因果的。
但如果你有想法,请分享!
致谢
NeuralNote 由 Damien Ronssin 和 Tibor Vass 开发。 插件用户界面由 Perrine Morel 设计。
贡献者
非常感谢所有贡献者!
- jatinchowdhury18:文件浏览器。
- trirpi:
SCALE QUANTIZE
中的更多音阶选项。