3

我正在寻找使用 HPS 方法在 iphone 中实现语音音高检测。但是检测到的音调不是很准确。Performous在音高检测方面做得不错。

我查看了代码,但没有完全理解计算背后的理论。他们使用 FFT 并找到峰值。但是他们使用 FFT 输出相位的部分让我感到困惑。我认为他们对语音频率使用了一些启发式方法。

那么,任何人都可以解释一下 Performous 中用于检测音高的算法吗?

4

1 回答 1

2

[Performous][1] 从麦克风中提取音高。代码也是开源的。以下是该算法的功能描述,来自编码它的人(Tronic on irc.freenode.net#performous)。

  • PCM 输入(带缓冲)
  • FFT(一次 1024 个样本,之后从缓冲区前面删除 200 个样本)
  • 重新分配方法(针对之前 200 个样本的 FFT)
  • 峰值过滤(这部分可以做得更好,甚至可以省略)
  • 将峰值组合成谐波组(我们称组合为音调)
  • 音调的时间过滤(更新之前检测到的音调集,而不是简单地使用新检测到的音调)
  • 选择最好的人声(频率限制,加权,也可以使用谐波阵列,但我不认为我们这样做)

我仍然无法从这些信息中弄清楚并实施它。如果有人管理此问题,请在此处发布您的结果,并评论此回复,以便 SO 通知我。

任务是围绕此代码创建一个最小的 C++ 包装器。

于 2010-11-17T21:16:06.327 回答