如何在音频频谱达到特定高度时捕捉事件,例如由大声发出的触发事件

本文关键字:事件 音频 高度 | 更新日期: 2023-09-27 18:08:19

我已经有了播放器的程序,波形发生器,频谱分析仪,时间记录的列表框。这些东西起作用了。现在,我想添加一个功能,当你播放音频文件时,当它达到某个阈值或频谱的最大峰值时,当前事件的时间将被记录到列表框中。我设法在列表框中添加时间,所以现在,我唯一的问题是如何检测事件。我在频谱分析仪中使用FFT,但我被困在这个。我怎么能做到这一点,使用我目前的资源,如FFT,波形发生器,频谱分析仪等?

这就是我需要的,

  1. 当我播放音频并且声音达到一定阈值时,将记录流的当前时间。

非常感谢。我的截止时间是36小时后。我们将感激每一个帮助。我的未来取决于此。祝我好运。谢谢大家!请给我一个样品或确切的做法。如果你需要我项目的进一步信息,我会给你我的资源。谢谢!上帝保佑。

注:这个项目需要一个军鼓探测器。但我没有多少时间了,所以我决定检测的不是军鼓,而是频谱的最高峰,因为大多数时候,军鼓产生的最高峰比其他乐器,如贝斯,铙钹。谢谢你们了!

如何在音频频谱达到特定高度时捕捉事件,例如由大声发出的触发事件

只要你能生成一个持续更新的频谱,那么你只需要在每次更新后迭代频谱并检查相关bin的大小。通常情况下,你可能会重叠每个样本窗口,例如,如果你的FFT大小和样本窗口大小是N = 1024,那么你将第一个FFT超过样本0。1023,然后下一个区块是512…1535。这50%的重叠有助于减少检测的延迟(你可以增加重叠,但如果你走得太远,那么它可能会变得过于计算密集)。

检测小鼓最直接的方法是计算输入信号和小鼓撞击记录之间的相互关系。当交叉相关性很高时,您可能会找到匹配。

这将优于测试FFT,因为FFT计算输入信号与纯正弦波的相互关系。

这种方法被称为"匹配滤波",在最优检测理论中很有名。

如果你只是想看看信号何时变得非常强大,你不需要FFT。你可以用Parseval定理它把时域和频域的力量联系起来。这允许你从平方样本的移动平均值创建一个O(1)滑动窗口能量检测器。

顺便说一句,这正是与DSP堆栈交换相关的那种问题