在音频文件中找到音频样本(频谱图已经存在)



我正在努力实现以下目标:

  • 使用Skype,呼叫我的邮箱(作品)
  • 输入密码,告诉邮箱我要录制新的欢迎辞(作品)
  • 现在,我的邮箱提示我在哔的一声后录制新的欢迎辞
  • 我想等待哔哔声然后播放新消息(不工作)

我是如何努力达到最后一点的:

  • 使用FFT和滑动窗口创建频谱图(作品)
  • 为哔哔声创建"指纹"
  • 搜索来自skype的音频中的指纹

我面临的问题是:
从skype和参考哔哔声音频上的fft的结果在数字意义上是不一样的,即它们是相似的,但不一样,虽然哔哔声是从一个音频文件中提取的skype音频的记录。下图左边是Skype音频的哔哔声的频谱图,右边是参考哔哔声的频谱图。正如你所看到的,它们非常相似,但并不相同……
上传图片http://img27.imageshack.us/img27/6717/spectrogram.png

我不知道,如何从这里继续。我是否应该对其进行平均,即将其分成列和行,并像这里描述的那样比较这些单元格的平均值?我不确定这是最好的方法,因为他已经说过,它对短音频样本不太有效,而且哔哔声的长度不到一秒……

有什么提示吗?

您应该确定峰值频率和持续时间(可能是频率在该持续时间内的最小功率(RMS是最简单的测量)

这应该很容易测量。为了使事情变得更聪明(但对于这个简单的匹配任务可能完全没有必要),您可以断言在蜂鸣声窗口期间不存在其他峰值。

更新

要比较完整的音频片段,您将需要使用卷积算法。我建议使用现成的库实现,而不是自己编写。

最常见的快速卷积算法通过循环卷积定理使用快速傅里叶变换(FFT)算法。具体来说,两个有限长度序列的循环卷积是通过对每个序列取FFT,逐点相乘,然后执行逆FFT来找到的。然后,使用该技术结合零扩展和/或丢弃部分输出,可以有效地实现上述类型的卷积。其他快速卷积算法,如Schönhage-Strassen算法,在其他环中使用快速傅里叶变换。

维基百科将http://freeverb3.sourceforge.net列为开源候选项目

编辑添加API教程页面链接:http://freeverb3.sourceforge.net/tutorial_lib.shtml

额外的资源:

http://en.wikipedia.org/wiki/Finite_impulse_response

http://dspguru.com/dsp/faqs/fir

debian上已有的包含相关工具的软件包:

[brutefir - a software convolution engine][3]
jconvolver - Convolution reverb Engine for JACK
libzita-convolver2 - C++ library implementing a real-time convolution matrix
teem-apps - Tools to process and visualize scientific data and images - command line tools
teem-doc - Tools to process and visualize scientific data and images - documentation
libteem1 - Tools to process and visualize scientific data and images - runtime
yorick-yeti - utility plugin for the Yorick language

首先,我将在频率方向上稍微平滑一下,以便频率的小变化变得不那么相关。然后简单地取每个频率并减去两个振幅。把差异平方并加起来。也许先将信号归一化,这样总振幅的差异就不重要了。然后将差异与阈值进行比较

最新更新