Skip to content

音乐信息检索

音乐信息检索(Music Information Retrieval,MIR)是用计算方法分析、理解、检索音乐信号的研究领域,涵盖节拍检测、和弦识别、结构分析、流派分类、情感识别、源分离等任务。它是 Spotify 推荐算法、Shazam 听歌识曲、AI 音乐制作工具的技术底座。前置阅读:语音与音频技术概览。

MIR = 给 AI 装一双”音乐家的耳朵”。 音乐家听到一段曲子,能立刻告诉你节拍速度、用了什么和弦、什么时候副歌开始、是什么风格——MIR 就是要让计算机完成这些分析。

  • 节拍检测(Beat Tracking)= 数拍子。 像人脚跟着音乐打拍子一样,算法从能量变化中找到周期性脉冲,估计每分钟的节拍数(BPM)。Disco 音乐稳定有力,节拍明显;古典音乐速度起伏,难度大得多。
  • 和弦识别(Chord Recognition)= 听和声。 和弦是多个音同时发出的组合,决定了音乐的”情绪色彩”(大调明亮、小调忧伤)。算法从频谱中识别同时出现的音高组合,输出和弦序列(如 C-G-Am-F)。
  • 音乐结构分析(Structure Analysis)= 找段落。 一首歌由前奏-主歌-副歌-桥段等段落构成,算法通过检测重复模式和音色变化来自动切分结构——DJ 做混音、DJ 软件做自动跳转都依赖它。
  • 源分离(Source Separation)= 声学解混。 把一首混好的歌拆成人声、鼓、贝斯、其他乐器等独立轨道——相当于”音频版去背景”。Spleeter 和 Demucs 是该领域的里程碑。
  • 情感识别(Emotion Recognition)= 听情绪。 根据音色、节奏、调式等特征,判断音乐的情感(快乐、悲伤、激昂、宁静),用 Valence-Arousal 二维模型标注。

原始音频经过特征提取后,不同任务共享前段特征、在后段接入不同的模型头:

从传统方法到深度学习,源分离的能力实现了质的飞跃:

Shazam 的核心是从频谱图中提取稳定的峰值指纹,通过时间锚点配对生成哈希:

Chroma 特征:音高的”十二色光谱”

Section titled “Chroma 特征:音高的”十二色光谱””

西方音乐使用 12 个半音(音高类,pitch class):C、C#、D、D#、E、F、F#、G、G#、A、A#、B。Chroma 特征的核心思想是将整个频谱”折叠”到这 12 个维度上——具体做法是对每个音高类,计算该音高在所有八度上的能量之和。

为什么这样做有意义?考虑一个 C 大三和弦(C-E-G),它可以在钢琴的低音区弹奏,也可以在吉他的高把位弹奏。虽然两者的绝对频率完全不同,但在 Chroma 表示中它们几乎一致——因为折叠掉了八度信息后,剩下的就是”C、E、G 这三个音高类有高能量”。这使得 Chroma 具有一个极其重要的性质:八度不变性(octave invariance)。

这个性质让 Chroma 成为以下任务的理想特征:

  • 和弦识别:无论歌手用高音还是低音唱同一个和弦,Chroma 表示都相似。
  • 翻唱检测(Cover Song Detection):翻唱版本可能换了调、换了乐器、改了速度,但和弦序列的 Chroma 轮廓仍然高度相关。
  • 音乐匹配:在不同录音条件、不同乐器配置下匹配同一首歌的旋律。

实际计算中,Chroma 通常基于 Constant-Q Transform(CQT,常数 Q 值变换)而非标准 STFT,因为 CQT 的频率分辨率在低频更细、在高频更粗——正好匹配音乐中半音间距的对数分布(每个八度的频率范围翻倍)。

音频指纹:Shazam 的峰值哈希算法

Section titled “音频指纹:Shazam 的峰值哈希算法”

Shazam 听歌识曲能在几秒内从数千万首歌中找到匹配,其核心是 2002 年由 Avery Li-Chun Wang 提出的基于频谱峰值的音频指纹算法。它巧妙地利用了频谱中最稳定的特征——能量峰值。

算法分三步:

  1. 峰值提取。对录音做 STFT 得到时频图(横轴时间、纵轴频率、颜色代表能量),然后提取其中能量最显著的点(局部极大值)。这些峰值对应音频中最突出的频率成分,对背景噪声、房间混响、麦克风差异等干扰非常稳健——因为一首歌的旋律线产生的峰值,即使录音质量差也不会消失。

  2. 锚点-目标点配对(Anchor-Target Pairing)。对每个峰值,在它附近定义一个”目标区域”(通常是其后一段时间和一定频率范围内的其他峰值)。将锚点与目标点配对,生成一个三元组哈希:(fanchor,ftarget,Δt)(f_\text{anchor}, f_\text{target}, \Delta t)——即锚点频率、目标点频率、两者的时间差。一首歌可提取数十万条这样的哈希指纹。

  3. 数据库匹配与时间一致性验证。识别时,对用户录制的几秒音频执行同样的流程,得到一组指纹,然后在数据库中查找匹配的指纹。关键在于:真正的匹配不仅指纹相同,而且所有匹配指纹的时间偏移(数据库中指纹时间减去录音中指纹时间)高度集中在一个值附近。Shazam 用直方图统计时间偏移,如果某个偏移值上的命中数超过阈值,就确认匹配。这一步使得算法能在几百万首歌中、即使在嘈杂环境中也能精确识别。

💡 音频指纹的核心设计哲学是:从信息中丢弃不稳定的部分(绝对能量、精确波形),只保留最稳健的部分(峰值之间的相对频率和时间关系),从而在噪声、压缩、变速等各种干扰下仍能匹配。

NMF(Non-negative Matrix Factorization,非负矩阵分解) 是深度学习普及之前,源分离和音色分析的主流方法。它的核心思想优雅而富有物理可解释性。

给定一个音乐的声谱图 VV(由 STFT 计算得到的非负矩阵,形状为 频率数 × 时间帧数),NMF 将其分解为两个非负矩阵的乘积:

V≈W×HV \approx W \times H

其中:

  • W(基矩阵,basis matrix) 的每一列是一个”基频谱”(spectral pattern),可以理解为一种音色模板——例如某个乐器演奏某个音符时的典型频谱形状。
  • H(激活矩阵,activation matrix) 的每一行表示对应的基在时间上的强度变化——什么时候响、什么时候弱。
  • 非负约束(所有元素 ≥0\geq 0)是 NMF 的灵魂:它使得分解结果具有**“部分-of-整体”(parts-of-whole)的物理可解释性**。声谱图本身就是非负的(能量没有负值),用非负基的加法组合来重建它,每个基自然对应一种实际存在的声学成分。

在源分离中的应用:如果要分离钢琴和吉他,可以先用两种乐器各自的录音训练 WW 的列向量,使其分别学到钢琴和吉他的音色模板;然后对混合音频固定 WW、只优化 HH,得到的 HH 就告诉你每个时刻哪些乐器在响——据此重建各自的频谱。实际中常用半监督方式:用多个音符模板组成 WW 的字典(dictionary),覆盖各种音高和乐器。

NMF 的局限在于它是线性模型,无法捕捉音乐中的非线性时频结构(如混响、频率调制等),因此分离质量远不如后来的深度学习方法。但它至今仍有价值:计算开销小、可解释性强,在实时音频处理和音乐编辑工具中仍有应用。

import librosa # 音频分析库
import numpy as np
# 加载音乐文件(librosa 自带示例曲目)
y, sr = librosa.load(librosa.ex("choice"), sr=22050)
# 估计全局速度(BPM)
tempo, _ = librosa.beat.beat_track(y=y, sr=sr)
print(f"估计速度: {tempo:.1f} BPM")
# 提取节拍时间点
_, beats = librosa.beat.beat_track(y=y, sr=sr)
beat_times = librosa.frames_to_time(beats, sr=sr)
print(f"前 5 个节拍时间(秒): {beat_times[:5].round(3)}")
# 提取 Chroma 特征用于和弦分析
chroma = librosa.feature.chroma_cqt(y=y, sr=sr)
print(f"Chroma 形状: {chroma.shape}") # (12, 帧数) — 12 个音高类

💡 Chroma 特征(色度图)把所有频率折叠到 12 个音高类(C, C#, …, B),每个音高类的值是该音高在所有八度上的能量之和。这种”折叠”使得不同八度上演奏的同一个和弦产生相似的 Chroma 表示——非常适合和弦识别和翻唱检测。Shazam 的听歌识曲也依赖类似的音高指纹技术。

# pip install spleeter — 预训练源分离工具
from spleeter.separator import Separator
# 加载预训练的 2-stem 模型(人声 / 伴奏)
separator = Separator("spleeter:2stems")
# 分离人声与伴奏,输出到目录
separator.separate_to_file("song.wav", "./output/")
# 输出 output/song/vocals.wav(纯人声)
# 输出 output/song/accompaniment.wav(纯伴奏)
# pip install demucs — Meta 开源的 SOTA 源分离模型
import subprocess
# 用 HTDemucs v4(2023-2024 仍是 SOTA)分离 4 条轨道
subprocess.run([
"python", "-m", "demucs.separate",
"--two-stems", "vocals", # 只分离人声/伴奏两轨
"-n", "htdemucs_ft", # 微调版 HTDemucs v4 模型
"song.mp3",
"-o", "./output/"
])
# 输出 output/htdemucs_ft/song/vocals.wav(纯人声)
# 输出 output/htdemucs_ft/song/no_vocals.wav(伴奏)
# 从一段音乐中抽取多组特征,组合成定长特征向量(分类器输入)
# pip install librosa numpy
import librosa
import numpy as np
y, sr = librosa.load(librosa.ex("choice"), sr=22050)
# 1. 节奏特征:过零率(明亮/嘈杂程度)与 RMS 能量包络(响度变化)
zcr = librosa.feature.zero_crossing_rate(y)
rms = librosa.feature.rms(y=y)
# 2. 音色特征:频谱质心(明暗)、频谱带宽、MFCC(音色指纹)
centroid = librosa.feature.spectral_centroid(y=y, sr=sr)
bandwidth = librosa.feature.spectral_bandwidth(y=y, sr=sr)
mfcc = librosa.feature.mfcc(y=y, sr=sr, n_mfcc=13)
# 3. 和声特征:Chroma(12 音高类)与 Mel 频谱(CNN 的常用输入)
chroma = librosa.feature.chroma_cqt(y=y, sr=sr)
mel = librosa.feature.melspectrogram(y=y, sr=sr, n_mels=128)
# 把每组特征压成"均值 + 标准差"两个标量,拼接成定长向量
def summarize(feat: np.ndarray) -> np.ndarray:
return np.concatenate([feat.mean(axis=1), feat.std(axis=1)])
feature_vector = np.concatenate([
summarize(zcr), summarize(rms), summarize(centroid),
summarize(bandwidth), summarize(mfcc), summarize(chroma),
summarize(mel)])
print(f"特征向量维度: {feature_vector.shape[0]}")
# 可直接喂给 SVM / MLP 等分类器做流派或情感分类

💡 特征的选择决定任务上限:流派分类常用 Mel 频谱图 + CNN,和弦识别用 Chroma,节拍检测用 onset strength envelope。同一段音乐在不同特征下的表示,是 MIR 所有下游任务的起点。

  • 特征选择决定上限:不同任务依赖不同的音频特征——节拍检测用 onset strength envelope,和弦识别用 Chroma,流派分类用 Mel 频谱图。选错特征,再强的模型也学不好。
  • 数据驱动的流派分类:传统方法用手工特征 + SVM 分类,深度学习方法直接用 Mel 频谱图训练 CNN,准确率显著提升。详见 卷积神经网络。
  • 源分离的”理想掩蔽”范式:神经网络不是直接预测分离后的频谱,而是预测一个掩蔽(mask,0 到 1),用掩蔽乘以混合频谱得到各源——这比直接预测更稳定。
  • Demucs 的波形域优势:传统方法在频域操作(需要 STFT),Demucs 直接在波形域用编解码器分离,避免了相位重建问题,音质更通透。
  • 评估指标:源分离用 SDR(Signal-to-Distortion Ratio,信号失真比)衡量分离质量;节拍检测用 F-measure 评估拍点命中率。
  • 音乐与语音的差异:音乐的频率范围更宽(20Hz 到 20kHz vs 语音的 300Hz 到 3.4kHz),和声结构更复杂,通常使用更高的采样率(44.1kHz)和更多的 Mel 滤波器组。
  • 版权与伦理:音乐分析技术可用于翻唱检测、版权保护,也可能被滥用(如未经授权的翻唱生成)。使用源分离技术时须尊重原始作品的版权。
  • 音乐推荐:Spotify、网易云音乐的推荐系统不仅基于协同过滤,还结合音频特征分析(节奏、音色、能量)来推荐相似歌曲——尤其对新歌和冷门歌(无播放数据)的推荐至关重要。
  • 听歌识曲:Shazam、Sound Hound、QQ音乐”听歌识曲”——核心技术是音频指纹(audio fingerprint),从短片段提取稳健的频谱峰值指纹,在大规模数据库中快速匹配。
  • AI 音乐制作:用源分离提取人声用于 remix,用自动转录(music transcription)将录音转成乐谱,用结构分析做自动剪辑——是 AI 音乐生成与制作的辅助工具链。详见 AI 音乐生成。
  • 自动伴奏转录:Guitar Pro、AnthemScore 等工具用 MIR 技术将音频自动转成 MIDI 乐谱,极大降低了音乐制作门槛。
  • 音乐教育:Yousician 等应用用音高检测实时判断学生演奏是否正确,给出即时反馈。
  • 版权监测:YouTube 的 Content ID、各大音乐平台的翻唱检测系统,用音频指纹和旋律匹配技术自动识别侵权内容。

2024-2025 年,AI 音乐生成经历了类似 ChatGPT 对文字带来的颠覆——从技术 demo 一跃成为可生产级别工具。理解 MIR 与 AI 音乐生成的关系,有助于看清这个领域的技术全貌。

MIR 是分析(analysis):从已有音乐中提取信息(节拍、和弦、音色、结构)。AI 音乐生成是合成(synthesis):从条件描述出发创造新音乐。两者共享大量底层技术:

  • 共享特征表示:生成模型在训练阶段需要大量 MIR 特征来理解音乐数据分布。例如 MusicGen 在 EnCodec 的离散 token 表示上做自回归生成,而 Chroma、Mel 频谱等 MIR 特征正是评估生成质量的标准。
  • MIR 作为评估工具:判断 AI 生成的音乐是否”像真的音乐”——节拍是否稳定、和弦是否合理、结构是否连贯——需要 MIR 技术来量化评估。
  • MIR 作为可控生成的控制信号:用 MIR 从参考音频中提取和弦序列、节奏模式、情感标签,作为条件输入引导生成模型,实现风格迁移和条件音乐生成。
模型/产品时间说明
MusicGen(Meta)2023基于 Transformer + EnCodec 的开源文本生成音乐模型,支持条件控制(melody、text),社区广泛使用
Stable Audio(Stability AI)2023-2024开源潜空间扩散模型(latent diffusion),可生成数分钟长的高质量音乐和音效
Jukebox(OpenAI)2020-2023端到端音乐生成探索,用分层 VQ-VAE 生成含人声的完整歌曲,计算成本极高但开创性强
MusicLM(Google)2023基于 Transformer 的文本到音乐生成,引入 AudioLM 的分层建模思路
Suno v3/v42024-2025商用 AI 音乐生成里程碑,可从文字描述生成含人声、多乐器的完整歌曲(2-4 分钟),质量接近商业发行水平
Udio2024与 Suno 竞争的 AI 音乐生成平台,主打高音质和复杂编曲生成
HTDemucs v4(Meta)2023-2024音乐源分离领域持续 SOTA,HTDemucs(Hybrid Transformer Demucs)结合时频域表示与 Transformer 长程建模能力

基于 Transformer 与 LLM 范式的音乐理解

Section titled “基于 Transformer 与 LLM 范式的音乐理解”

近年的趋势是将 LLM(大语言模型)的成功范式迁移到音乐领域——把音频编码为离散 token 序列,然后用 Transformer 做自回归建模:

  • AudioLM / MusicLM:Google 用分层量化(类似 EnCodec)把音频转成 token,用语言模型的方式预测下一个 token,实现高保真音频续写和文本条件生成。
  • MusicAgent:用 LLM 作为”指挥”,调用节拍检测、和弦识别、源分离等 MIR 子工具组成的多智能体系统,自动完成复杂音乐分析任务——体现了 MIR 与 LLM 的深度融合。
  • Jukebox / SongLM:OpenAI 等探索端到端音乐生成,直接从文字到含歌词的完整歌曲,跳过传统 MIDI 中间表示。

2024-2025 年,AI 生成音乐的爆发引发了前所未有的版权争议:

  • 唱片公司诉讼:2024 年 6 月,RIAA(美国唱片业协会)联合索尼、环球、华纳三大唱片公司起诉 Suno 和 Udio,指控其未经授权使用大量受版权保护的录音训练模型。
  • “声音克隆”问题:AI 可以模仿特定歌手的音色演唱未授权歌曲(如 2023 年爆红的 AI “Drake” 歌曲),引发肖像权和表演权争议。
  • 水印与溯源:学术界和产业界正在开发 AI 音乐水印技术,用于区分 AI 生成与人类创作的音乐——这成为 MIR 领域的新研究方向。
  • MIR 在版权保护中的角色:音频指纹和翻唱检测技术正在被扩展为”AI 生成检测”——通过分析音色异常、生成伪影等特征,识别音频是否由 AI 生成。

💡 从 MIR 的视角看,AI 音乐生成对版权检测提出了更高要求:不仅需要检测”这首歌是否抄了那首歌”,还需要检测”这段音频是否由模型生成”、“这段音频是否模仿了某位歌手的音色”。这些新需求正在推动 MIR 技术的边界扩展。

类库语言说明
librosaPythonMIR 领域最流行的 Python 库,提供节拍检测、Chroma、Mel 特征等全套分析工具
madmomPython专注音乐节拍、downbeat 检测的深度学习库,MIREX benchmark 常胜方案
SpleeterPythonDeezer 开源的快速源分离工具,2-stem/4-stem/5-stem 预训练模型
DemucsPythonMeta 开源的波形域源分离模型,HTDemucs v4 在 MDX Challenge 夺冠,2023-2024 仍是 SOTA
essentiaC++/PythonMusic Technology Group 开发的综合 MIR 分析库,支持 200+ 音频特征
music21PythonMIT 开发的音乐分析与符号化处理库,擅长乐理计算与乐谱分析
audiomentationsPython音频数据增强库,用于训练数据扩充(加噪、变速、混响等)
术语英文解释
音乐信息检索MIR (Music Information Retrieval)用计算方法分析、理解、检索音乐信号的交叉学科
节拍跟踪Beat Tracking自动检测音乐中的节拍时间点和整体速度(BPM)
每分钟节拍数BPM (Beats Per Minute)音乐速度的单位,60 BPM 表示每秒一拍
色度特征Chroma Feature将频谱折叠到 12 个音高类的特征,具有八度不变性,广泛用于和弦识别和翻唱检测
常数 Q 值变换CQT (Constant-Q Transform)频率分辨率随频率对数变化的时频变换,适合音乐分析(半音间距对数分布)
和弦识别Chord Recognition自动识别音乐每一时刻演奏的和弦类型(如 C 大三和弦)
源分离Source Separation从混合信号中分离出各个独立声源(人声、鼓、贝斯等)
音频指纹Audio Fingerprint从音频中提取的紧凑稳健摘要,通常基于频谱峰值哈希,用于快速匹配和识别(如 Shazam)
信号失真比SDR (Signal-to-Distortion Ratio)源分离任务的标准评估指标,衡量分离质量(越高越好)
旋律轮廓Melody Contour主旋律音高随时间变化的轨迹
非负矩阵分解NMF (Non-negative Matrix Factorization)将声谱图 V 分解为 V ≈ W×H 的传统方法,W 为音色模板、H 为时间激活,非负约束带来物理可解释性
八度不变性Octave Invariance忽略八度差异后音高类保持一致的特性,Chroma 特征的核心优势
翻唱检测Cover Song Detection识别不同演唱/编曲版本是否为同一首歌的任务,常用 Chroma 和旋律轮廓匹配
  • McFee et al., “librosa: Audio and Music Signal Analysis in Python” (SciPy 2015):librosa 库论文,MIR 领域最常用的工具,引用超 8000 次,入门必读。
  • Wang, “An Industrial-Strength Audio Search Algorithm” (ISMIR 2003):Shazam 核心算法论文,频谱峰值指纹的经典工作,听歌识曲技术的基石。
  • Hennequin et al., “Spleeter: a fast and efficient music source separation tool with pre-trained models” (2019):Deezer 的 Spleeter 论文,让源分离技术普及到大众。
  • Roux et al., “Hybrid Transformers for Music Source Separation” (ICASSP 2023):Meta 的 HTDemucs,结合时频域与 Transformer,在 MDX2021 Challenge 取得 SOTA,v4 版本(2023-2024)持续领先。
  • Copet et al., “Simple and Controllable Music Generation” (2023):Meta MusicGen 论文,基于 Transformer + EnCodec 的开源文本到音乐生成模型。
  • Agostinelli et al., “MusicLM: Generating Music From Text” (2023):Google 的文本到音乐生成模型,引入 AudioLM 分层建模思路。
  • Sioros & Gouyon, “A Helper Paradigm for Beat Tracking” (2013):节拍检测的经典思路,影响后续 madmom 等深度学习方案。
  • Casey et al., “Content-Based Music Information Retrieval: Current Directions and Future Challenges” (Foundations and Trends in IR 2008):MIR 领域经典综述,系统梳理了音频指纹、节拍检测、和弦识别等任务。
  • 延伸路线:分析已有音乐之后,AI 还能从零生成新音乐,见 AI 音乐生成。