Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当音频频谱达到特定高度时,如何捕捉事件,如由响声触发的事件?_C#_Audio_Fft_Spectrum - Fatal编程技术网

C# 当音频频谱达到特定高度时,如何捕捉事件,如由响声触发的事件?

C# 当音频频谱达到特定高度时,如何捕捉事件,如由响声触发的事件?,c#,audio,fft,spectrum,C#,Audio,Fft,Spectrum,我已经有了播放器的程序,波形发生器,频谱分析仪,记录时间的列表框。这些东西在工作。现在,我想添加一个功能,当你播放音频文件,它达到某个阈值或频谱的最大峰值时,当前事件的时间将记录到列表框中。我设法在列表框中添加了时间,所以现在,我唯一的问题是如何检测事件。我在频谱分析仪中使用了FFT,但是我;我被这件事缠住了。如何使用我现有的资源(如FFT、波形发生器、频谱分析仪等)实现这一点 这就是我需要的 当我播放音频并且声音达到某个阈值时,将记录流的当前时间。 非常感谢你。我的死线将在36小时后。我们将感

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

这就是我需要的

当我播放音频并且声音达到某个阈值时,将记录流的当前时间。 非常感谢你。我的死线将在36小时后。我们将感谢您的帮助。我的未来取决于此。祝我好运谢谢大家!请给我一个样品或确切的事情做。如果你需要我的项目的进一步信息,我会给你我的资源。谢谢上帝保佑


另外,该项目需要一个陷阱鼓探测器。但是我没有太多的时间了,所以我决定不去探测圈套,而是探测光谱的最高峰值,因为大多数时候,圈套鼓产生的峰值比其他乐器,如低音、钹等都要高。谢谢大家

只要你能生成一个不断更新的光谱,那么你只需要在每次更新后迭代光谱,并检查相关箱子的大小。通常,您可能会重叠每个采样窗口,例如,如果您的FFT大小和采样窗口大小为N=1024,则首先对采样0..1023进行FFT,然后下一个块将为512..1535。这种50%的重叠有助于减少检测延迟。您可以增加重叠,但如果重叠过大,则可能会导致计算量过大。

检测陷阱鼓最直接的方法是计算输入信号和陷阱鼓命中记录之间的互相关。当互相关度较高时,可能存在匹配项

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


这种方法被称为最佳检测理论。如果你只想知道信号何时变得非常强大,你不需要FFT。您可以使用与时域和频域的功率相关的函数。这允许您从平方样本的移动平均值创建O1滑动窗口能量检测器


顺便说一句,这正是与我使用的NAudio库相关的问题。我还看到了codeproject的项目SoundCatcher。但这对我没有帮助,因为我的代码结构与它不同。我只是个c初学者。你们说的光谱的最大峰值是什么意思?你在寻找某个特定频率的峰值吗?还是只有一个频率?如果没有,您可以在时域中计算信号功率。