3分钟搞定音频转MIDI:Basic Pitch智能转录工具实战全指南
2026/8/21 17:33:05 网站建设 项目流程

3分钟搞定音频转MIDI:Basic Pitch智能转录工具实战全指南

【免费下载链接】basic-pitchA lightweight yet powerful audio-to-MIDI converter with pitch bend detection项目地址: https://gitcode.com/gh_mirrors/ba/basic-pitch

深夜的录音棚里,吉他手老周盯着屏幕直挠头——他刚录完一段即兴独奏,里面有好几处滑音和揉弦,他想把这段演奏转成MIDI发给编曲搭档。可他试过的几个转录工具要么只能识别单音旋律,要么把和弦处理得一团糟,更别提那些弯音细节,转出来全是呆板的"僵尸音"。直到他遇到Basic Pitch——一个由 Spotify 音频智能实验室开源的音频转MIDI工具,轻量、免费,还自带音高弯曲检测,一首歌从导入到导出MIDI,前后不到三分钟。

它能为你解决什么:旧痛新解

过去把音频变成MIDI,是件让人血压飙升的事:

  • 痛点一:单音限定。老式转录器遇到和弦直接"投降",一个音一个音地蹦,复杂的和声根本无从下手。
  • 痛点二:滑音丢失。吉他推弦、弦乐滑奏这类连续音高变化,传统工具要么忽略,要么转成一段段生硬的半音阶。
  • 痛点三:模型臃肿。不少专业转录系统需要庞大的模型和高配硬件,普通笔记本跑起来又慢又烫。

Basic Pitch 给出的解法截然不同——它走的是"小而精"的路线:

老问题新方案
只能转单音支持多音高检测,和弦、复调照单全收
弯音被抹平内置音高弯曲检测,滑音、推弦细节完整保留
挑乐器、挑音色与乐器无关,吉他、钢琴、人声通吃(单乐器表现最佳)
依赖重型算力模型仅十几兆,CPU 上跑得飞快

换句话说,它把过去专业工作室才有的转录能力,压缩成了一个普通人也能随手用的工具。相关的技术原理发表在 ICASSP 2022 会议上,论文题为《A Lightweight Instrument-Agnostic Model for Polyphonic Note Transcription and Multipitch Estimation》,想深究的读者可以去翻。

快速上手:从零到第一份MIDI

第一步:检查环境

Basic Pitch 对系统相当友好,macOS、Windows、Ubuntu 都支持,Python 3.7 到 3.11 均可。唯一的坑是Mac M1 芯片目前只认 Python 3.10,其他版本请用虚拟机兜底。

第二步:安装

装起来几乎不费力气,一条命令就完事:

pip install basic-pitch

如果你以后想升级,补上--upgrade参数即可。想从源码折腾的朋友,也可以把仓库 clone 下来本地安装:

git clone https://gitcode.com/gh_mirrors/ba/basic-pitch cd basic-pitch pip install -e .

💡 关于模型运行时:Basic Pitch 默认不会强制安装 TensorFlow。Linux 默认配 TensorFlowLite,macOS 默认配 CoreML,Windows 默认配 ONNX。需要 TensorFlow 的话,用pip install basic-pitch[tf]单独加装。

第三步:跑出第一条命令

安装完成后,终端里输入下面的格式,指定一个输出目录和一个音频文件:

basic-pitch <输出目录> <音频文件>

比如:

basic-pitch ./midi_out ./samples/echoes.flac

稍等片刻,你会看到程序打印出一串 ✨ 花字提示,随后midi_out/目录里就出现了echoes_basic_pitch.mid——你的第一份转录成果诞生了。🎉

一次完整的实战演练:把一段钢琴独奏变成MIDI

假设你现在有一份piano_sketch.mp3,想转成可编辑的MIDI。跟着下面的步骤走:

第 1 步:准备干净的输入。优先用单乐器、无背景噪音的录音。多乐器混音不是不能转,但效果会打折扣——记住它的脾气:一次只伺候一件乐器。

第 2 步:限定频率范围。钢琴的音域大约从 27.5 Hz(最低键A0)到 4186 Hz(最高键C8),但人耳能听清、模型最擅长的核心区在 50~2000 Hz。转钢琴时不妨显式指定范围,减少杂讯:

basic-pitch --minimum-frequency 50 --maximum-frequency 2000 ./midi_out ./piano_sketch.mp3

第 3 步:带上附加产物。想同时拿到原始模型输出和音符事件表,方便回头分析,就追加两个开关:

basic-pitch --save-model-outputs --save-note-events ./midi_out ./piano_sketch.mp3

第 4 步:检查结果。此时midi_out/下会多出三类文件:

  • piano_sketch_basic_pitch.mid——标准的 MIDI 文件,拖进任何 DAW(Logic Pro、Ableton Live、FL Studio)都能打开;
  • piano_sketch_basic_pitch.npz——模型三层输出(音符、起始点、音高轮廓)的原始数据,适合做研究分析;
  • piano_sketch_basic_pitch.csv——逐条音符事件,包含起止时间、音高、力度和弯音值,可以直接用 Excel 打开。

第 5 步:导入DAW微调。把 MIDI 拉进工程,量化、改力度、换音色,随你发挥。整个流程熟练后,3 分钟绰绰有余。

如果你更习惯写 Python 代码,而不是敲命令行,basic_pitch/inference.py里提供了现成的函数:

from basic_pitch.inference import predict from basic_pitch import ICASSP_2022_MODEL_PATH model_output, midi_data, note_events = predict("piano_sketch.mp3") midi_data.write("piano_sketch.mid")

批量处理多个文件时,建议先把模型加载一次、在循环里复用,避免反复加载拖慢速度:

from basic_pitch.inference import predict, Model from basic_pitch import ICASSP_2022_MODEL_PATH model = Model(ICASSP_2022_MODEL_PATH) for f in ["a.mp3", "b.mp3", "c.mp3"]: _, midi_data, _ = predict(f, model) midi_data.write(f.replace(".mp3", ".mid"))

核心参数深度讲解:调到最合适的音准

转录质量好不好,参数占一半。Basic Pitch 的 CLI 参数集中在basic_pitch/predict.py中定义,下面是几个决定成败的关键旋钮。

阈值三件套

模型对每一帧音频都会输出"这里是起始点/这里在延续/这里是某个音高"的置信度,阈值就是过滤低置信度的闸门:

参数默认值作用调低效果调高效果
--onset-threshold0.5判定"音符开始"的最低置信度更容易捕捉轻柔的起音,但也更易误报起音更干净,弱音可能漏掉
--frame-threshold0.3判定"音符持续"的最低置信度适合连奏、长音多的曲子音符更短促,断奏感强
--minimum-note-length127.7ms过滤掉过短的音符保留装饰音过滤碎音,谱面更整洁

实践建议:录音偏柔、气声多,就把--onset-threshold降到 0.4;想消除一堆几毫秒的杂音,把--minimum-note-length提到 150~200ms。

频率与弯音

  • --minimum-frequency/--maximum-frequency:以 Hz 为单位裁剪音域。吉他solo大致在 82~880 Hz,人声旋律在 80~1000 Hz 附近,对着乐器的真实音域设限能显著提升准确率。
  • --multiple-pitch-bends:默认情况下,重叠音符共享一条弯音信息;加上这个开关后,每个音高会被映射到独立的 MIDI 轨道,各自拥有独立的弯音曲线——处理复杂滑音时非常有用,代价是 MIDI 文件里会出现多个音轨。
  • --no-melodia:跳过 Melodia 后处理步骤。这个步骤能提升旋律线的平滑度,但会增加耗时;追求速度时可以关掉,代价是精度可能略降。

输出相关

  • --sonify-midi:额外生成一份 MIDI 的 WAV 试听文件,方便不用 DAW 也能直接对答案。
  • --midi-tempo:默认 120 BPM,决定 MIDI 播放时的节拍速度。
  • --sonification-samplerate:试听 WAV 的采样率,默认 44100 Hz,一般不用动。
  • --debug-file:写入一份调试 JSON,内含窗口切分、各层输出和最终音符估计,排查问题的一把利器。

另外,模型格式可以手动指定,四种运行时各有千秋:

# 手动指定模型格式 basic-pitch --model-serialization tf ./midi_out ./a.wav basic-pitch --model-serialization coreml ./midi_out ./a.wav basic-pitch --model-serialization onnx ./midi_out ./a.wav basic-pitch --model-serialization tflite ./midi_out ./a.wav
格式加载优先级适用场景
TensorFlow第一顺位功能最完整,桌面研究首选
CoreML第二顺位macOS/iOS 生态
TensorFlowLite第三顺位移动端、低资源设备
ONNX第四顺位跨平台部署

模型文件就放在basic_pitch/saved_models/icassp_2022/目录下,四种格式一应俱全。

进阶玩法:和真实工作流的三种结合

场景一:批量整理旧录音素材

手头有一堆 WAV/MP3 老录音要归档成 MIDI?命令行天然支持多文件:

basic-pitch --save-note-events ./archive ./tape1.wav ./tape2.mp3 ./tape3.flac

一次投喂多个文件,程序逐个处理,再配合 CSV 音符事件,你可以快速给每段素材做"内容摘要",建一个可检索的音符级索引库。

场景二:音乐教学中的乐谱还原

老师想让学生练习某段示范音频的旋律,可以用频率限制把人声或乐器分离出来先转录,再导出 CSV 统计音高分布、节奏特征,把"听写"变成"对照"。核心步骤就是前面实战演练里的三件套命令,配合--save-note-events输出,分析起来相当顺手。

场景三:嵌入自己的Python工具链

如果你在写一个"音频→乐谱→自动伴奏"的小程序,predict()返回的三样东西正好够用:model_output是原始三层输出(basic_pitch/note_creation.py里的model_output_to_notes()可以继续深加工),midi_data是可直接落盘的 PrettyMIDI 对象,note_events是逐音符数据。批量场景记得复用Model实例,否则每次调用都要重载模型,慢得让人抓狂。

踩坑与排查手册

症状一:报错 "not a file path" / "does not exist"

  • 诊断:输入路径写错,或文件不在指定位置。
  • 药方:检查路径拼写和引号;把音频和输出目录都换成绝对路径再试。注意输出目录必须提前创建好

症状二:提示 "already exists and would be overwritten"

  • 诊断:输出目录里已经有同名文件,工具拒绝覆盖。
  • 药方:换个输出目录,或先手动清掉旧文件(记得别用危险命令,手动在文件管理器里删即可)。

症状三:模型加载失败 / 找不到运行时

  • 诊断:当前环境缺少对应模型格式的推理库。
  • 药方:按需补装——TensorFlow 用pip install basic-pitch[tf],CoreML 用pip install 'basic-pitch[coreml]',ONNX 用pip install 'basic-pitch[onnx]';实在不行就pip install basic-pitch --force-reinstall整体重来一遍。

症状四:转录结果杂音多、错音多

  • 诊断:大概率是输入太"脏",或参数没卡好。
  • 药方:优先换更清晰的单乐器录音;再依次尝试收紧--onset-threshold、提高--minimum-note-length、用--minimum-frequency/--maximum-frequency锁死音域。这三板斧能解决大部分"糊"的问题。

症状五:处理大文件很慢

  • 诊断:模型内部按 2 秒窗口滑动处理音频,文件越长耗时越线性上升;Melodia 后处理也吃时间。
  • 药方:加--no-melodia跳过平滑步骤;把长音频先切成若干段分批转录;磁盘空间不足时优先处理更短的片段。

总结与行动清单

至此你应该明白了:Basic Pitch 是个"麻雀虽小五脏俱全"的音频转MIDI神器——多音高、弯音、乐器无关三大看家本领齐活,安装只要一条命令,四种模型格式随取随用,还能用几个阈值参数把精度调到舒服的位置。它可能不是功能最花哨的转录器,但绝对是最容易上手的那一个。

现在就可以动手的四件事:

  1. 装起来:跑一次pip install basic-pitch,然后拿你手机里随便一段录音试转。
  2. 调一遍参数:用--onset-threshold--frame-threshold--minimum-note-length各转一遍同一段音频,对比差异,建立手感。
  3. 写个小脚本:调用predict()把你的音频目录批量转成 MIDI,顺便用--save-note-events生成 CSV 分析报告。
  4. 深入源码:读一读basic_pitch/inference.py(推理管线)、basic_pitch/note_creation.py(音符合成)、basic_pitch/predict.py(命令行入口),再对照tests/目录下的测试用例理解行为,你就能把它改造成自己的转录工具箱。

资源参考

  • 官方文档:README.md
  • 命令行入口:basic_pitch/predict.py
  • 推理与保存逻辑:basic_pitch/inference.py
  • 音符事件与MIDI生成:basic_pitch/note_creation.py
  • 模型文件目录:basic_pitch/saved_models/icassp_2022/
  • 测试用例:tests/

【免费下载链接】basic-pitchA lightweight yet powerful audio-to-MIDI converter with pitch bend detection项目地址: https://gitcode.com/gh_mirrors/ba/basic-pitch

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询