博客研究
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%。
| 指标 | 无损 | 对照 | MP3 320 | AAC 256 | MP3 192 |
|---|---|---|---|---|---|
| 起音 F1,吉他 | 0.7626 | 0.7627 | 0.7611 | 0.7644 | 0.7616 |
| 起止 F1,吉他 | 0.5224 | 0.5222 | 0.5212 | 0.5228 | 0.5210 |
| 起音 F1,Slakh 歌曲 | 0.5204 | 0.5210 | 0.5204 | 0.5240 | 0.5227 |
| 起音 F1,我们的乐队作品 | 0.7136 | 0.7136 | 0.7123 | 0.7089 | 0.7054 |
| 找到的音符(共 3,893 个) | 2,741 | 2,742 | 2,739 | 2,744 | 2,737 |
| 其中有变化的音符 | — | 1 | 10 | 17 | 14 |
| 调与标注一致 | 12 段中 10 段 | 12 段中 10 段 | 12 段中 10 段 | 12 段中 10 段 | 12 段中 10 段 |
| 速度不变 | — | 14 段中 14 段 | 14 段中 14 段 | 14 段中 14 段 | 14 段中 14 段 |
| 长度变化(采样点) | — | 0 | 0 | +16 到 +733 | 0 |
| 信噪比,dB(中位数) | — | 58.4 | 53.2 | 39.4 | 30.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 毫秒。
| 指标 | 无损 | MP3 320 |
|---|---|---|
| 起音 F1,有音高的音符(全曲 703 个) | 0.6707 | 0.6687 |
| 鼓的起音 F1(423 个鼓点) | 0.6983 | 0.7023 |
| 贝斯 / 吉他 / 钢琴的起音 F1 | 0.455 / 0.681 / 0.827 | 0.471 / 0.678 / 0.832 |
| 速度,BPM | 133.0 | 133.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 只说明音符有没有被听出来,不说明写出的乐谱好不好读。
参考资料
- What Is the Effect of Audio Quality on the Robustness of MFCCs and Chroma Features?——Urbano、Bogdanov、Herrera、Gómez 和 Serra,ISMIR 2014
- GuitarSet 1.1.0——Xi、Bittner、Pauwels、Ye 和 Bello,Zenodo(CC BY 4.0)
- Slakh2100——Manilow、Wichern、Seetharaman 和 Le Roux,Zenodo(CC BY 4.0)
- A Lightweight Instrument-Agnostic Model for Polyphonic Note Transcription and Multipitch Estimation——Bittner 等,Spotify,2022(Basic Pitch)
- High-resolution Piano Transcription with Pedals by Regressing Onset and Offset Times——Kong、Li、Song、Wan 和 Wang,2020
- mir_eval.transcription——mir_eval 文档
- FFmpeg formats: the mp3 muxer——FFmpeg 文档
- 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 和视频则按原样保存。