博客研究

AI 扒谱到底有多准?我们实测了一下

起音 F1 是什么,两款音频转 MIDI 引擎在真实吉他录音和一段乐队片段上各得几分,以及这些数字没有告诉你的事。

先说结论

出初稿够用,出成品还不行。2026年10月2日,我们用 12 段公开吉他录音做了测试:Spotify 开源的 Basic Pitch 起音 F1 达到 0.744,Mirelo 的 Audio-to-MIDI 为 0.471;1.0 意味着每个音符的音高和时间都对,而且没有一个多余的音。六段独奏录音里有三段 Mirelo 一个音都没返回,但在一段 60 秒的乐队片段上,它以 0.672 比 0.520 领先。音符时长远不如音符起点可靠;而且这些数字都说明不了写出来的乐谱好不好读。

起音 F1(onset F1)衡量的是什么?

起音 F1 把扒谱结果和参考标注逐个音符比对,漏掉的音和多出来的音同样扣分。扒出的一个音符,只要音高与某个参考音符相差不超过 50 音分(四分之一音),起点相差不超过 50 毫秒,就算匹配。每个参考音符只能被匹配一次。

匹配完会得到两个比例。精确率是模型写出的音符中匹配上的比例;召回率是参考音符中被模型找到的比例。F1 是两者的调和平均数,只要其中一个低,F1 就高不起来。假设一段音乐有 100 个音:一个模型写了 100 个音,对了 75 个,得分 0.75;另一个模型找到了其中 90 个,却为此写了 150 个音,召回率 0.9,精确率 0.6,F1 只有 0.72——多写的 60 个音拉低了分数。

起止 F1(onset+offset F1)再加一个条件:每个音符的结束点也要落在参考音符时长的 20% 以内,如果 50 毫秒更长,就按 50 毫秒算。Spotify 的 Basic Pitch 论文以起音 F1 为主要指标,因为音符结束点不那么客观,论文点出了混响、延音踏板和标注方式这几个原因。两个指标我们都会列出。但两者都不检查音符被分给了哪件乐器,也不管调号和节奏该怎么记。

我们的测试方法

我们用的是 GuitarSet 1.1.0(Xi 等,ISMIR 2018)。这个公开数据集收录了 360 段约 30 秒的吉他片段:六位吉他手弹奏同样的 30 份旋律谱,涵盖五种风格,每份先弹一遍伴奏(comp),再在伴奏之上弹一遍独奏。录音用的是六路分弦拾音器(hexaphonic pickup),每根弦各有一路独立信号,作者因此能把音符标注基本自动化。

我们选了 12 段完整录音,每位吉他手一段独奏、一段伴奏,用的是单声道麦克风音轨,共 433 秒。选哪几段在运行任何模型之前就定好了:先排除三段已知标注有误的录音(GuitarSet 的 issue #4 和 #5:一个重复的音符和错误的时间),再对每位吉他手的每种演奏方式,取“scorestarling-v1:”加文件名的 SHA-256 哈希值排序最靠前的文件。下文的逐段结果表列出了选中的 12 段。

打分用的是 mir_eval 0.8.2,容差采用上文所述的默认值,先逐段计算再取平均,让每段录音的权重相同。没有做任何调参:不加时间偏移,不做过滤,也不做对齐平移。Basic Pitch 0.4.0 在一台 Mac 上运行,两次完整运行的输出逐字节一致。Mirelo 的 Audio-to-MIDI API(返回的模型版本为 a2m-1.1)在 2026年10月2日处理了同样的 12 段录音,没有附带可选的乐器列表;据 Mirelo 的更新日志,其 API 自 2026年8月6日起支持这个参数。

以下所有结果都受四点限制:

  • Basic Pitch 的论文把 GuitarSet 和 Slakh 列入了训练数据,所以两项测试都对它有利。我们无法确认这 12 段 GuitarSet 录音是否在它的训练集里;乐队片段则取自 Slakh 的测试集。
  • 12 段吉他录音加一段 60 秒乐队片段,只是诊断性的小样本,不是基准测试。人声和真实录制的乐队演奏都没有测;钢琴只在合成音频上测过,用的也是另一个模型(见文末问答)。
  • 吉他录音在 Mirelo 上只跑了一次,是在 10月2日。它没返回任何音符的那三段,我们也没有换个方式重试,比如告诉它录音里是原声吉他。乐队片段在 10月5日重新提交了一次,返回的音符完全相同。
  • 这些数字都不评价写出来的乐谱。像 MV2H 这样在乐谱层面打分、还会检查拍号、声部和时值的指标,我们还没有测。

ScoreStarling 扒单件乐器或人声用的是 Basic Pitch,扒乐队用的是我们的合作伙伴 Mirelo,所以我们并不是中立的旁观者。正因如此,我们在这里把方法、样本和局限都写清楚。

Basic Pitch 和 Mirelo,谁扒吉他更准?

Basic Pitch 胜出:独奏旋律上遥遥领先,伴奏上小幅领先。

GuitarSet,12 段录音,宏平均,2026年10月2日
录音Basic Pitch 起音 F1Mirelo 起音 F1Basic Pitch 起止 F1Mirelo 起止 F1
独奏(6 段)0.8180.3010.6540.168
伴奏(6 段)0.6690.6420.3620.280
全部(12 段)0.7440.4710.5080.224

2026年10月4日更新:ScoreStarling 的单件乐器选项做了两处改动——整体持续偏高或偏低的录音会先校准到 A440,旋律改为一次只写一个音——之后我们用同样的 12 段录音重测了一遍。独奏得分 0.846,伴奏 0.679,总体 0.763,算上音符结束点则为 0.522。上表保留的仍是 10月2日单独运行 Basic Pitch 的结果。

六段独奏录音中,有三段 Mirelo 一个音符都没返回。这三段在它的独奏平均分里按 0 计算,因为用户拿到的就是空结果;我们也没有重跑。返回了音符的那几段,表现有好有坏。第一段 00_BN3-154-E_solo 上,两个引擎在音符起点上打成平手(Basic Pitch 0.809,Mirelo 0.814),但 Mirelo 的音符结束点偏差更大(起止 F1 为 0.320,Basic Pitch 为 0.524),还把这首 154 BPM 的曲子判成了约 76.9 BPM,只有原速的一半。伴奏方面,六段里有两段 Mirelo 明显更好。12 段全部算上,它的起止 F1 为 0.224。

逐段起音 F1,GuitarSet,2026年10月2日
录音Basic PitchMirelo
00_BN3-154-E_solo0.8090.814
01_Rock2-85-F_solo0.8690.326
02_BN1-147-Gb_solo0.8600.667
03_SS1-68-E_solo0.7820(无音符)
04_SS3-84-Bb_solo0.8210(无音符)
05_SS1-68-E_solo0.7680(无音符)
00_BN3-154-E_comp0.6850.810
01_SS1-68-E_comp0.6220.854
02_SS1-100-C#_comp0.5670.491
03_SS3-98-C_comp0.7310.745
04_Rock3-117-Bb_comp0.6830.385
05_Rock2-85-F_comp0.7270.564

Basic Pitch 的 0.744,与作者在他们自己的 GuitarSet 测试集(72 段录音)上报告的结果相近:起音 F1 为 0.79,算上结束点为 0.56。两个引擎的速度也不同。Basic Pitch 在一台 Mac 上用 54 秒处理完了 433 秒的音频,这并不代表正式上线环境的耗时;第一段录音它用了 6.1 秒,Mirelo 用了 37 秒。

换成整支乐队会怎样?

混音更难扒,这一回是 Mirelo 领先。我们取了 Slakh2100 测试集中 Track01881 的前 60 秒。Slakh2100 收录了 2,100 首歌,都是用基于采样的虚拟乐器从 MIDI 渲染而成,所以参考音符分毫不差。这一分钟里,钢弦吉他、爵士吉他、钢琴、贝斯、颤音琴和鼓都有演奏。把所有有音高的乐器合在一起算、不管音符被分给了哪件乐器,并以两个引擎各自返回的 MIDI 文件打分,Basic Pitch 的起音 F1 为 0.520,Mirelo 为 0.672。

Basic Pitch 只输出一个合并的声部,也不写鼓。Mirelo 为每件乐器各写一个声部,所以只有 Mirelo 能按乐器打分,这里按 General MIDI 的乐器类别分组:

钢琴和鼓扒得最好;颤音琴大多被漏掉了。参考音符数量见下表。
Mirelo 各乐器类别得分,Slakh2100 Track01881,前 60 秒
乐器类别(参考音符数)起音 F1
钢琴(178)0.827
吉他:钢弦和爵士(334)0.681
贝斯(127)0.455
颤音琴(64)0.137
鼓点(423)0.698

要把两把吉他区分开就更难了。按 10月2日 Mirelo 返回的音符列表逐声部打分,钢弦吉他为 0.364,爵士吉他为 0.148;MIDI 文件里的音符比这份列表早约 20 毫秒开始,所以按 MIDI 算出的数字略有不同。Mirelo 还给歌曲里根本没有的乐器报了 92 个音:管风琴、合成器铺底音色(pad)、小提琴和大提琴。鼓点只按时间打分,不管是哪面鼓。这只是一首歌,而且是渲染出来的,不是真实录音,所以只能看个大致方向,不能当排名。

哪些音最可能扒错?

对 Basic Pitch 来说,是它以低力度写出的那些音。Basic Pitch 把每个音符的 MIDI 力度设为 127 乘以模型在这个音符上的平均激活值,所以力度同时也是一种置信度。它为 12 段吉他录音一共写了 2,715 个音符,按同样的 50 毫秒窗口匹配,低力度的音大多是错的:

Basic Pitch 写出的音力度越低,越可能是错的。具体数量见下表。
Basic Pitch 力度与正确率,共 2,715 个音符
力度音符数占比正确率
低于 502479.1%21%
50–592509.2%40%
60–7987232.1%67%
80–1271,34649.6%86%

用力度来区分音符对错,AUC 为 0.77(0.5 相当于抛硬币,1.0 为完美);换成音符时长只有 0.53,所以音短并不是有用的预警信号。把力度低于 50 的音全部删掉,总体起音 F1 能从 0.744 升到 0.765,可这些音里每五个就有一个是对的。所以 ScoreStarling 的乐谱检查只把它们列为存疑,而不是直接删除,最后交给你的耳朵判断。如果你自己运行 Basic Pitch,在钢琴卷帘里按力度给音符着色或排序,也能得到同样的待查清单。

为什么各家公布的准确率对不上?

因为它们在不同的录音上测的是不同的东西,有的甚至没说明测的是什么。

公开数据,2026年10月3日核对
来源数据测试对象
Basic Pitch 论文(Bittner 等,2022)起音 F1 0.79;算上结束点为 0.56GuitarSet 测试集,72 段录音
MuScriptor 论文(Rouard 等,2026)起音 F1 60.4(百分制),YourMT3+ 为 32.52作者自有数据中 372 段经过精细标注的真实录音
ScoreCloud 指南“音高准确率通常在 85-95%”独奏乐器和人声;未说明方法
本次测试起音 F1:Basic Pitch 0.744,Mirelo 0.47112 段 GuitarSet 录音

只有指标、容差和录音都一致时,数字才有可比性。我们测出的 Basic Pitch 成绩可以和它论文里的放在一起看,因为两者都是在 GuitarSet 上算起音 F1,只是子集不同;但不能和 MuScriptor 的放在一起比。ScoreCloud 的页面没说音高准确率是怎么算的、测了多少段录音,也没说时间是否计入。MuScriptor 是一个开放的研究模型,Mirelo 的 Audio-to-MIDI Pro 就是从它发展而来的,Mirelo 称其正式上线的模型更准确。Mirelo 在 2026年9月17日发布的文章中说,更新后的模型“在我们的评估中”提高了音符和乐器识别的准确率,但没有公布具体数字。

音符准了,就能得到好读的乐谱吗?

不能。起音 F1 比的是以秒计时的音符,完全不管写出来的乐谱好不好读。一份乐谱还需要调号、合理的升降号、写出来的休止符、声部和拍号,而 Basic Pitch 这类模型输出的纯 MIDI 一样都没有。基于同样的 Basic Pitch 音符,我们最初的记谱程序在全部 12 个案例中写出的乐谱都没有调号,也看不到休止符;MuseScore Studio 的 MIDI 导入功能则在 12 个案例中有 10 个写出了标注的调,并显示了所有休止符。Mirelo 自己输出的 MusicXML,在它完成的 9 个案例中有 5 个写出了标注的调,而且全都记在单行高音谱表上。

扒谱得分高,乐谱照样可能难读;页面整洁,也照样可能藏着错音。完整的前后对比见《为什么 MIDI 导入 MuseScore 后乱成一团》。

该选哪个扒谱引擎?

看录音来选。以下是我们对这些结果的解读:

  • 单件乐器或单条旋律:选 Basic Pitch。它在吉他独奏上遥遥领先,免费开源,而且它的 README 也说一次只处理一件乐器时效果最好。
  • 乐队,或者需要分出各个声部或鼓的混音:选 Mirelo 这类多乐器模型,因为 Basic Pitch 只会写出一个合并的声部。
  • 吉他伴奏:两个都行。它们的平均分接近,在不同录音上各有胜负;如果选哪个很重要,就拿一小段两个都试试。
  • 人声:我们还没有测。钢琴:我们只在合成音频上测过自己的钢琴独奏选项,所以没法给钢琴扒谱引擎排名。

无论用哪个引擎,节奏和音符时值都要用耳朵再核对一遍。上面 10月2日的测量和 10月4日的重测都不包括我们的钢琴独奏选项。ScoreStarling 扒单件乐器或人声用 Basic Pitch,扒钢琴独奏用一个钢琴模型,两者都免费;扒乐队用 Mirelo,需要消耗积分(2026年10月7日核实)。每种都只处理上传文件的前五分钟,文件最大 100 MiB。人声或单件乐器默认按 4/4 拍记谱;钢琴独奏会自己判断拍号;乐队乐谱的拍号由演奏推断,或在开始前选定。吉他、贝斯和尤克里里声部还可以显示为 TAB 谱,但不记推弦、滑音和击弦;详见规格说明。

参考资料

  1. GuitarSet 1.1.0——Xi、Bittner、Pauwels、Ye 和 Bello,Zenodo(CC BY 4.0)
  2. GuitarSet 项目主页——GuitarSet 作者团队
  3. GuitarSet 的 issue 列表——GitHub 上的 marl/GuitarSet
  4. Slakh2100——Manilow、Wichern、Seetharaman 和 Le Roux,Zenodo(CC BY 4.0)
  5. Cutting Music Source Separation Some Slakh——Manilow 等,WASPAA 2019
  6. A Lightweight Instrument-Agnostic Model for Polyphonic Note Transcription and Multipitch Estimation——Bittner 等,Spotify,2022
  7. Basic Pitch 及其 note_creation.py——Spotify,GitHub
  8. mir_eval.transcription——mir_eval 文档
  9. MuScriptor: An Open Model for Multi-Instrument Music Transcription——Rouard 等,2026
  10. Audio-to-MIDI Pro: full mixes to editable MIDI——Mirelo,2026年9月17日
  11. Audio to MIDI converter 和 Changelog——Mirelo
  12. How Accurate Is Automatic Music Transcription?——ScoreCloud

常见问题

AI 能把 MP3 扒成谱吗?

能,可以逐个音符扒成 MIDI,只是会有错要改。Spotify 的 Basic Pitch 这类模型最擅长单件乐器;完整的混音需要多乐器模型,准确率也更低。在我们 2026年10月2日的测试中,成绩最好的一组是 Basic Pitch 扒吉他独奏,起音 F1 为 0.818(ScoreStarling 对它的用法做了两处调整后,10月4日重测为 0.846),所以还是要准备凭耳朵改掉一些音。

Basic Pitch 的准确率够不够出乐谱?

单件乐器出个初稿,够了。在 12 段吉他录音上,只看音符起点时它的起音 F1 为 0.744,把音符结束点也算上就只剩 0.508;而且它输出的 MIDI 没有调号、休止符和声部,得靠记谱这一步补上。《为什么 MIDI 导入 MuseScore 后乱成一团》一文讲了这一步会改动什么。

怎样自己测扒谱的准确率?

你需要一份信得过的参考标注,音符时间以秒为单位。有了它,就可以用开源的 mir_eval 库,按我们用的容差给音符匹配打分:起点 50 毫秒,音高 50 音分,结束点为音符时长的 20% 或 50 毫秒。没有参考标注的话,就把短乐段循环播放,凭耳朵对照乐谱和录音。

为什么 Mirelo 扒某些吉他独奏时一个音都没出?

我们也不知道。2026年10月2日,六段独奏录音中有三段返回了空结果。当时我们没有提供 Mirelo 的可选乐器列表,之后也没有重试。在伴奏上,它的成绩接近 Basic Pitch;在多乐器片段上,它领先。

AI 扒人声或钢琴准不准?

人声方面,我们暂时还给不出自己的数据。钢琴方面,只在合成音频上测过:25 首乐曲的开头几个小节,每首以弹性速度演奏两遍(共 50 段演奏,2026年10月6日测量)。我们基于 Kong 等人钢琴模型的钢琴独奏选项,识别出了约 92% 的谱面音符,但 50 段里只有 35 段的拍子找对了,拍子、拍号和弱起小节全对的只有 26 段。Basic Pitch 的作者把它设计成适用于各种乐器,也包括人声。无论用哪个模型,清晰、干声的单人声或单件乐器录音,都最有机会扒准。

带来任何音乐带走一份乐谱