音频转 MIDI 是音乐信息检索(MIR)领域的经典问题。传统方案依赖手工设计的音高追踪算法,而深度学习模型如 Spotify 的 Basic-Pitch 在准确率上实现了显著突破。然而,将这类模型部署为可交互的 DAW 插件时,工程团队面临一个核心矛盾:模型推理延迟与实时性需求之间的张力。
NeuralNote 作为基于 Basic-Pitch 的开源音频插件,其技术实现揭示了一种务实的架构策略 —— 通过混合推理引擎平衡性能与延迟,同时也坦诚地暴露了当前技术栈在实时转录上的固有边界。
混合推理架构:RTNeural 与 ONNX Runtime 的分工
NeuralNote 的推理流程分为两个阶段:特征提取与神经网络推理。这一划分并非随意,而是基于两类计算的不同特性做出的工程决策。
特征提取层采用 Constant-Q Transform(CQT)叠加 Harmonic Stacking,负责将时域音频信号转换为适合神经网络处理的时频表示。CQT 相比传统 STFT 具有对数频率分辨率的优势,更适合音乐音高分析。NeuralNote 将这一阶段封装为独立的 ONNX 模型,通过 ONNX Runtime 执行。选择 ONNX Runtime 的考量在于其跨平台支持成熟、算子覆盖全面,且支持通过 ort-builder 构建自定义静态库以减小部署体积。
神经网络推理层则采用 RTNeural—— 一个专为实时音频处理设计的 C++ 神经网络推理库。Basic-Pitch 的 CNN 被拆分为四个顺序子模型,以适配 RTNeural 的实时处理模式。RTNeural 的优势在于其无动态内存分配的设计,以及针对音频流处理优化的 API,能够在音频回调线程中安全执行而不会引入不可预测的延迟。
这种分工体现了边缘部署的典型模式:将计算密集但结构固定的预处理交给通用推理框架,将需要严格实时保证的核心推理交给专用库。
实时性受限的三重技术边界
尽管 NeuralNote 在工程实现上追求低延迟,但官方文档明确指出其无法支持真正的实时转录。这一限制源于三个相互叠加的技术因素:
第一,CQT 的时频权衡。 CQT 为了在低频段获得足够的频率分辨率,必须使用较长的时域窗口。NeuralNote 的文档指出,获取最低频率分量的幅度需要超过 1 秒的音频块。这意味着即使后续处理延迟为零,系统本身也存在秒级的固有延迟。
第二,CNN 的因果性延迟。 Basic-Pitch 的卷积网络本身引入了约 120ms 的额外延迟。对于需要逐帧输出的实时系统而言,这一量级已接近可感知的阈值。
第三,音符事件算法的非因果性。 转录流程的最后一步是将神经网络输出的后验概率图(posteriorgram)转换为离散的音符事件。NeuralNote 采用的算法需要从未来向过去处理数据 —— 即利用 "未来" 信息来修正当前帧的音符判断。这种非因果设计在离线处理中能够提升准确率,却天然与实时流处理不兼容。
这三重限制构成了音频转录领域的系统性挑战:特征提取需要足够的上下文、神经网络需要合理的感受野、后处理需要全局优化 —— 三者都与 "实时" 存在根本张力。
工程实践要点与可落地清单
对于希望构建类似系统的开发者,NeuralNote 的实现提供了以下可复用的工程模式:
模型拆分与格式转换。 原始 TensorFlow 模型通过 tf2onnx 转换为 ONNX 格式,随后使用 Netron 等可视化工具手动提取权重,重新组织为适合目标推理库的格式。这一过程虽然繁琐,但允许针对部署环境进行深度优化。
静态库构建。 通过 ort-builder 项目,可以构建仅包含必要算子的 ONNX Runtime 静态库。NeuralNote 的构建脚本会自动下载预编译的静态库,Windows 用户若使用非 VS2022 版本则需手动执行转换流程。
JUCE 框架集成。 作为跨平台的音频插件框架,JUCE 提供了统一的音频回调、参数管理和 UI 渲染机制。NeuralNote 的代码结构展示了如何将模型推理层(Lib/Model)与插件外壳清晰分离,使得核心算法可以独立复用。
可落地的参数配置建议:
- 音频缓冲区大小:根据目标延迟与 CPU 负载权衡,通常 512–1024 样本(@48kHz 约 10–20ms)
- CQT 参数:最小频率 27.5Hz(A0)、每八度 36 个 bins、hop 长度根据延迟需求调整
- 模型输入帧长:接受 ≥1s 的音频块以获取完整低频信息
- 后处理阈值:note onset 阈值 0.5、frame threshold 0.3(根据 Basic-Pitch 原始论文建议)
结语
NeuralNote 的价值不仅在于提供了一个可用的音频转 MIDI 工具,更在于其技术选型的透明度与对实时性限制的诚实披露。在边缘 AI 部署中,识别 "不能做什么" 往往比 "能做什么" 更具工程价值。对于音频转录场景,当前的技术路径暗示了一个务实的开发策略:优先保证离线处理的准确率与易用性,将实时版本视为需要额外架构创新(如流式 CQT 近似、因果神经网络、增量式后处理)的进阶目标。
资料来源
- NeuralNote GitHub 仓库: https://github.com/damrsn/NeuralNote
- Spotify Basic-Pitch 论文与实现: https://github.com/spotify/basic-pitch
- RTNeural 实时神经网络库: https://github.com/jatinchowdhury18/RTNeural
内容声明:本文无广告投放、无付费植入。
如有事实性问题,欢迎发送勘误至 i@hotdrydog.com。