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

Dan*_*rth 5 .net c# audio comparison fft

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

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

我如何尝试实现最后一点:

  • 使用 FFT 和滑动窗口创建频谱图(有效)
  • 为蜂鸣声创建“指纹”
  • 在来自Skype的音频中搜索该指纹

我面临的问题如下:
Skype 音频和参考哔声的 FFT 结果在数字意义上不相同,即它们相似但不相同,尽管哔声是从音频中提取的带有Skype音频录音的文件。下图显示了左侧 Skype 音频的蜂鸣声频谱图和右侧参考蜂鸣声的频谱图。如您所见,它们非常相似,但又不一样...
上传了一张图片 http://img27.imageshack.us/img27/6717/spectrogram.png

我不知道,如何从这里继续。我应该平均它,即将它分成列和行,并按照此处所述比较这些单元格的平均值吗?我不确定这是最好的方法,因为他已经说过,它不适用于短音频样本,并且哔声的长度不到一秒......

有关如何进行的任何提示?

seh*_*ehe 4

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

\n\n

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

\n\n

更新

\n\n

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

\n\n
\n

最常见的快速卷积算法通过循环卷积定理使用快速傅立叶变换 (FFT) 算法。具体来说,两个有限长度序列的循环卷积是通过对每个序列进行 FFT、逐点相乘,然后执行逆 FFT 来找到的。然后使用该技术结合零扩展和/或丢弃输出部分来有效地实现上面定义的类型的卷积。其他快速卷积算法,例如 Sch\xc3\xb6nhage\xe2\x80\x93Strassen 算法,在其他环中使用快速傅立叶变换。

\n
\n\n

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

\n\n

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

\n\n

其他资源:

\n\n

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

\n\n

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

\n\n

debian 上现有的带有相关工具的软件包:

\n\n
[brutefir - a software convolution engine][3]\njconvolver - Convolution reverb Engine for JACK\n\nlibzita-convolver2 - C++ library implementing a real-time convolution matrix\nteem-apps - Tools to process and visualize scientific data and images - command line tools\nteem-doc - Tools to process and visualize scientific data and images - documentation\nlibteem1 - Tools to process and visualize scientific data and images - runtime\n\nyorick-yeti - utility plugin for the Yorick language\n
Run Code Online (Sandbox Code Playgroud)\n