在一次现场钢琴独奏的录音里,音频波形看似杂乱,却暗藏着音高、时值和力度的精细信息。把这些信息抽取出来并映射到五线谱,正是音频转乐谱算法要解决的核心难题。
核心技术概览
算法的第一层是时频域分解,通常采用短时傅里叶变换(STFT)或常数 Q 变换(CQT),把时域信号转化为频谱图。频谱图的每一列对应一个时间片段,每一行对应一个音高区间,颜色强度即能量密度。随后,基于谱峰检测的音高估计器会在每个时间片段挑出最显著的频率峰值,这一步决定了后续音符的准确度。

多声部分离的关键
单音轨的转谱还能靠传统的峰值跟踪,但真实录音往往是多声部混合。这里常用的做法是先做盲源分离(BSS),比如基于独立分量分析(ICA)或深度卷积网络(U‑Net)将不同乐器的声谱图拆开。分离后,每条声部再独立走一遍音高/时值估计链,避免了和声间的相互干扰。
音高与时值的精细估计
音高定位往往结合谱峰的相位信息,用相位差法(Phase Vocoder)提升频率分辨率;而时值则依赖于起始点检测(Onset Detection),常见的特征是谱流(Spectral Flux)或能量上升率。检测到起始点后,利用动态时间规整(DTW)或隐马尔可夫模型(HMM)对音符持续时间进行序列化,最终得到符合乐谱规范的四分音符、八分音符等时值标记。
深度学习的加持
近几年,端到端的卷积‑循环混合网络(CRNN)以及基于自注意力的 Transformer 已经能够直接从原始波形输出 MIDI 序列。训练时使用大规模的合成与真实演奏数据集,损失函数兼顾音高准确率(Pitch Accuracy)和时值误差(Onset F‑score),使得模型在复杂和声里仍能保持 85% 以上的音符识别率。
- 时频域:STFT、CQT、Mel‑Spectrogram
- 源分离:ICA、U‑Net、Wave-U-Net
- 音高检测:谱峰跟踪、相位差法、CNN‑Pitch
- 起始检测:谱流、能量上升、RNN‑Onset
- 序列建模:HMM、DTW、Transformer
把这些模块拼接起来,系统就能把一段十分钟的交响乐录音,自动拆解成五线谱上的每一个音符、每一次强弱标记。想象一下,原本要在音频编辑器里反复听、手工记号的工作,现在只需点几下“导入”,便能在几分钟内得到可编辑的 MusicXML。这样一来,作曲家可以把更多时间花在创意上,而不是琐碎的记谱。

评论(16)
感觉单音还行,一到和弦就崩
hh,我上次录自己弹琴,转出来全是鬼画符😂
十分钟交响乐直接出MusicXML?吹牛吧
相位差法听起来玄乎,实际提升大吗?
U-Net做源分离效果咋样,有人实测过吗?
多声部混在一起还能分清楚?不太信
之前用过某软件转谱,结果连C大调都搞错,坑死了
这玩意真能识别出肖邦夜曲里的装饰音?
已全部加载完毕