博客研究

MP3 会影响扒谱准确率吗?WAV 与 MP3 实测对比

我们把同一批录音分别以无损音频、MP3 和 AAC 送进三个转谱引擎,并设了一组人耳听不出差别的对照。结果哪些变了、哪些没变,以及该上传哪种文件。

先说结论

320 kbit/s 的 MP3 不会。2026年10月5日,我们用三个引擎分别转了同一批录音的无损版本,以及经过 MP3 和 AAC 编码再解码的版本:Spotify 的 Basic Pitch 处理 12 段吉他录音,一个钢琴独奏模型处理 50 段钢琴演奏,Mirelo 处理一首乐队歌曲。320 kbit/s 的 MP3 让每个引擎的起音 F1(取值 0 到 1)最多只变化 0.002,相当于几千个音符里只变了寥寥几个,而且每个文件的长度精确到采样点、分毫不差。192 kbit/s 的 MP3 和 256 kbit/s 的 AAC 让分数最多变化 0.008,升高和降低的次数差不多;AAC 文件解码后最多长出 733 个采样点。

MP3 为什么会改变音符?

MP3 和 AAC 会丢掉人耳不太容易察觉的细节,主要是紧挨着较响声音的弱音和高频部分。Basic Pitch 这类模型读取的是音频的时频图,谁也不能保证它们会像听众一样忽略这些细节。一个处在模型阈值附近的音符,可能因为频谱的细微变化而出现或消失。

已有研究表明影响很小。Urbano 等人发现,码率从约 160 kbit/s 起,MFCC 特征在有损编码下保持稳定;而反映音级的色度(chroma)特征几乎完全不受编解码器和码率影响(ISMIR 2014)。他们测的是特征,不是转谱得到的音符,所以我们测了音符。

我们也有实际的考虑。录音及其播放音频的无损副本占了乐谱存储空间的 77%,我们想改存更小的副本,但前提是准确率丝毫不受影响。

我们怎么测的

每段录音都用 FFmpeg 8.1.1 分别编码(LAME 用 320 或 192 kbit/s 的恒定码率,FFmpeg 自带的 AAC 编码器用 256 kbit/s),再用读取上传文件的同一套代码解码。对照组把无损音频改动 0.01 dB——谁也听不出来——用来显示完全不经过编解码器时,各项指标本身会浮动多少。三个引擎都是确定性的:相同的输入总是得到相同的音符。

引擎与录音
引擎录音参考标注
Basic Pitch(ScoreStarling 处理单件乐器时的用法)12 段 GuitarSet 录音(六位演奏者各一段独奏、一段伴奏),Slakh2100 中一首乐队歌曲的前 60 秒,以及一首我们自己创作并合成的 58 秒乐队作品数据集自带的标注
Kong 等人的钢琴独奏模型25 首钢琴曲(24 首公有领域乐谱,外加 1 首我们自己写的),每首以不同的弹性速度演奏两遍,并用 SoundFont 钢琴音色加延音踏板渲染:共 50 段演奏实际演奏的音符
Mirelo 的 Audio-to-MIDI(a2m-1.1)同一首 Slakh 乐队歌曲的 60 秒片段,只测了无损和 MP3 320这首歌的 MIDI

起音 F1(onset F1)的判定方法是:转出的音符与参考标注中某个音符的音高相差不超过 50 音分、起点相差不超过 50 毫秒,就算转对;漏掉的音和多出来的音扣分相同。1.0 为满分。《AI 扒谱到底有多准?我们实测了一下》一文对这个指标有完整说明。

单件乐器的结果变了吗?

几乎没变。在 12 段吉他录音上,Basic Pitch 的起音 F1 在每种格式下都保持在 0.761 到 0.764 之间,而立体声文件缩小到了 WAV 的 14% 到 23%。

同样 12 段 GuitarSet 录音的五种格式:文件缩小到四分之一甚至更小,起音 F1 却几乎没动。具体数值见下表。
ScoreStarling 所用 Basic Pitch 在各格式下的结果(2026年10月5日)
指标无损对照MP3 320AAC 256MP3 192
起音 F1,吉他0.76260.76270.76110.76440.7616
起止 F1,吉他0.52240.52220.52120.52280.5210
起音 F1,Slakh 歌曲0.52040.52100.52040.52400.5227
起音 F1,我们的乐队作品0.71360.71360.71230.70890.7054
找到的音符(共 3,893 个)2,7412,7422,7392,7442,737
其中有变化的音符—1101714
调与标注一致12 段中 10 段12 段中 10 段12 段中 10 段12 段中 10 段12 段中 10 段
速度不变—14 段中 14 段14 段中 14 段14 段中 14 段14 段中 14 段
长度变化(采样点)—00+16 到 +7330
信噪比,dB(中位数)—58.453.239.430.3
文件大小,单声道 / 立体声100%100%45% / 23%23% / 17%27% / 14%

无损版本的分数是 0.763,而不是我们 10月3日那篇文章中的 0.744:从 10月4日起,ScoreStarling 把单件乐器写成一条旋律线,这改变了其中五段独奏的结果。两次测试用的都是 Basic Pitch 0.4.0。

钢琴独奏呢?

钢琴模型在每种格式下听出的音符都一样。以实际演奏的音符为参照,它的起音 F1 在无损版本上为 0.9427,对照组为 0.9426,MP3 320 为 0.9428,MP3 192 为 0.9433;每种格式下都找到了约 92.2% 的谱面音符。

根据这些音符判断拍子和小节线的那一步就没那么稳定了,但原因不在编解码器。经过人耳听不出的对照改动后,50 段演奏里有 5 段的小节线位置变了;经过 MP3 320 后有 7 段,其中 4 段和对照组是同样的演奏。这一步对任何改动都很敏感,所以我们把它看作测量本身的噪声,而不是 MP3 的代价。钢琴没有测试 AAC。

整支乐队呢?

我们用 Mirelo 做了一次付费对比,测的是那首 60 秒的乐队歌曲:无损文件和 MP3 都返回了 842 个音符和鼓点,其中 829 个(98.5%)的起点与无损版本相差不到 50 毫秒。

Mirelo Audio-to-MIDI 处理一首 60 秒乐队歌曲的结果
指标无损MP3 320
起音 F1,有音高的音符(全曲 703 个)0.67070.6687
鼓的起音 F1(423 个鼓点)0.69830.7023
贝斯 / 吉他 / 钢琴的起音 F10.455 / 0.681 / 0.8270.471 / 0.678 / 0.832
速度,BPM133.0133.0

为什么还是有音符变了?

因为输入只要有任何变化,就会牵动少数正好卡在模型阈值上的音符。在 Basic Pitch 找到的约 2,740 个音符中,听不出差别的对照改动了 1 个,MP3 320 改动了 10 个,AAC 改动了 17 个,MP3 192 改动了 14 个,单段录音里最多不超过 7 个。五组对比中,MP3 320 有三组略低(低 0.0013 到 0.0020),一组持平,一组略高。AAC 和 MP3 192 在吉他或 Slakh 歌曲上有所上升,在我们合成的乐队作品上有所下降,幅度最多 0.008。如果某种编解码器真的损害了准确率,应该会在所有测试上都明显下降,但没有一种是这样。

编解码器确实会改变的,是首尾的时间。AAC 编码器会在开头加入静音的预置采样,并把结尾补齐到完整的一帧;Apple 的文档写明延迟为 2112 个采样点。我们的 AAC 文件解码后长了 16 到 733 个采样点。FFmpeg 写出的 MP3 带有记录编码器延迟的 Xing/LAME 头信息,我们的 MP3 文件解码后与原始长度完全一致。当乐谱要和录音同步播放时,这一点很重要。

该上传哪种文件?

  • 手头有什么就传什么。先把 WAV 转成 MP3 得不到任何好处,把 MP3 转回 WAV 也恢复不了任何东西。
  • 如果一定要压缩,320 kbit/s 的 MP3 在信噪比上最接近原始文件,而且长度完全不变。
  • 低码率没有测过。我们只测到 192 kbit/s,所以请留意你的录音 App 保存的是什么格式和码率。
  • 录音质量远比格式重要:一个清楚的声部,混响少,没有背景音乐。要检查哪些地方,见《如何把语音备忘录转成乐谱》。

ScoreStarling 已据此做了调整:从 2026年10月5日起,上传的 WAV、AIFF 或 FLAC 文件会保存为 320 kbit/s 的 MP3,并用这份副本转谱,立体声录音的存储空间因此降到 WAV 的 23%。MP3、M4A、Ogg 和视频文件按原样保存。

这次测试的局限

  • Mirelo 只测了一首乐队歌曲;钢琴用的是合成音频,不是真实录制的钢琴。
  • 没有测人声。我们手上的真实录音是私人录音,而且本来就是 AAC 文件,没法作为无损参照。
  • 每种格式只用了一个编码器,也没有测低于 192 kbit/s 的码率。
  • 起音 F1 只说明音符有没有被听出来,不说明写出的乐谱好不好读。

参考资料

  1. What Is the Effect of Audio Quality on the Robustness of MFCCs and Chroma Features?——Urbano、Bogdanov、Herrera、Gómez 和 Serra,ISMIR 2014
  2. GuitarSet 1.1.0——Xi、Bittner、Pauwels、Ye 和 Bello,Zenodo(CC BY 4.0)
  3. Slakh2100——Manilow、Wichern、Seetharaman 和 Le Roux,Zenodo(CC BY 4.0)
  4. A Lightweight Instrument-Agnostic Model for Polyphonic Note Transcription and Multipitch Estimation——Bittner 等,Spotify,2022(Basic Pitch)
  5. High-resolution Piano Transcription with Pedals by Regressing Onset and Offset Times——Kong、Li、Song、Wan 和 Wang,2020
  6. mir_eval.transcription——mir_eval 文档
  7. FFmpeg formats: the mp3 muxer——FFmpeg 文档
  8. TN2258: AAC Audio, Encoder Delay and Synchronization——Apple

常见问题

扒谱该上传 WAV 还是 MP3?

都可以。在我们 2026年10月5日的测试中,用三个不同的引擎转谱,320 kbit/s 的 MP3 与其来源 WAV 的起音 F1 相差都不超过 0.002。录音设备或编辑软件给你什么文件,就直接上传,不用转换格式。192 kbit/s 的 MP3 和 256 kbit/s 的 AAC 相差在 0.008 以内;更低的码率没有测试。

MP3 码率更低,音符会变吗?

会变几个,有升有降。在 14 段录音约 2,740 个匹配上的音符中,192 kbit/s 时有 14 个发生了变化,320 kbit/s 时有 10 个,而一次人耳听不出的音量改动也让 1 个变了。起音 F1 在 192 kbit/s 时最多变化 0.008,在 320 kbit/s 时最多变化 0.002。低于 192 kbit/s 的码率没有测量。

为什么 AAC 文件会比 WAV 稍长一点?

AAC 编码器会在开头加入一段静音的预置采样(priming samples),并把结尾补齐到完整的一帧;Apple 的文档写明预置延迟为 2112 个采样点。如果播放器或解码器没有把它们裁掉,音频就会稍长一些。在我们的测试中,AAC 文件解码后长了 16 到 733 个采样点。FFmpeg 写出的、带 Xing/LAME 头信息的 MP3,解码后长度完全一致。

ScoreStarling 会把我的 WAV 转成 MP3 吗?

会。从 2026年10月5日起,上传的 WAV、AIFF 或 FLAC 文件会保存为 320 kbit/s 的 MP3(也就是本文测试的设置),并用这份副本转谱。上传的 MP3、M4A、Ogg 和视频则按原样保存。

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