SoundHound 中文文档 下载 App

Sound2Sound 技术全解析 —— 让机器听懂人哼的歌

两种技术路线的根本差异

所有识曲应用可以分成两大类,各有自己的核心技术路线:

路线代表产品输入核心技术解决的问题
外部声源比对Shazam、SoundHound 听音识曲外部播放的专业录音音频指纹(Audio Fingerprinting)"正在播放的是什么歌?"
人声哼唱比对SoundHound 独有用户自己的哼唱/唱歌Sound2Sound"我脑子里记得这段旋律,是什么歌?"

SoundHound 同时拥有这两条路线——橙色按钮默认走外部声源比对,你主动哼唱时走 Sound2Sound。

音频指纹回顾

先快速回顾一下音频指纹(Shazam 路线)的原理,方便对比:

  1. 把一段音频转换成频谱图(时间 × 频率 × 强度)
  2. 从频谱图中提取最亮的几个"峰值点"(类似于声音最响的时刻、对应哪个频率)
  3. 用这些峰值点的时间-频率坐标构成一段很短的"指纹"
  4. 用指纹去匹配数据库中每首歌的指纹

音频指纹的妙处是对噪音鲁棒——即使你在嘈杂环境中采集,只要那几个峰值点能被提取出来,就能匹配。但指纹只能来自专业录音,你哼出来的声音不可能和专业录音的波形一致。

Sound2Sound 的三步法

Sound2Sound 完全绕过了"波形比对",转而分析音乐的本质特征:旋律和节奏。

第一步:音高曲线(Pitch Contour)

不管你唱得好不好、用什么音色,一段旋律的核心是"什么时候变高了、什么时候变低了、每个音持续多久"。SoundHound 用 FFT(快速傅里叶变换)从你的哼唱中实时提取基频(F0),得到一条连续的音高曲线。

把音色信息全部丢掉——不管你是用假声、用胸声、男生唱低了五度、女生唱高了一个八度——只要音高变化的相对方向和时间间隔是对的,就保留下来。

第二步:音符分割(Note Segmentation)

连续的音高曲线还需要进一步切分成"音符"。SoundHound 检测音高曲线中的显著变化点(斜率突变),把曲线切成一段一段的音符。每个音符有两个属性:

第三步:动态时间规整(DTW)匹配

现在你得到了哼唱的"音符序列"和数据库中每首歌的"音符序列"。但你可能唱得快了半拍、慢了一拍、某个音多唱了一拍。怎么容忍这些时间偏差?

SoundHound 用 DTW(Dynamic Time Warping,动态时间规整)算法来解决这个问题。DTW 允许两个序列在时间轴上做非线性的伸缩,找到最优的对齐方式。这意味着:

为什么只有 SoundHound 在做这件事

不是没有人尝试过 Query by Humming(哼唱搜索)——实际上学术界从 2000 年就开始研究这个方向。但要把它做成一个可用的商业产品需要解决三个大问题:

  1. 数据库标注:需要大量的哼唱样本训练和校准匹配算法(SoundHound 从 2005 年就开始积累)
  2. 实时性:DTW 算法很耗算力,需要优化到能在手机端秒级完成
  3. 容错性:普通人哼唱的质量参差不齐,算法需要能容忍很大程度的不准确

SoundHound 之所以能成为唯一成熟的商业产品,一方面是积累的时间久,另一方面是它把 Houndify 语音 AI 的技术储备用到了哼唱识别上——两者都是"处理不完美的人声输入并从中提取结构"的问题。