C# 如何在.Net中进行实时基音检测?

C# 如何在.Net中进行实时基音检测?,c#,.net,vb.net,signal-processing,fft,C#,.net,Vb.net,Signal Processing,Fft,我想制作一个程序,检测麦克风前播放的音符。我正在测试Naudio的FFT功能,但通过我在audacity中所做的测试,FFT似乎无法正确检测基音。我打的是C5,但最高的选择是E7 我将频率分析窗口中的第一个下拉框更改为“增强的自相关”,之后,最高的选择是C5 我在谷歌上搜索了“增强的自相关”,但运气不好。好吧,如果你能接受GPLv2,为什么不看看Audacity的源代码呢 你很可能会被谐波干扰。您是否尝试过使用正弦波进行测试,以查看您的NAudio的FFT是否在标准范围内 见以下参考资料:

我想制作一个程序,检测麦克风前播放的音符。我正在测试Naudio的FFT功能,但通过我在audacity中所做的测试,FFT似乎无法正确检测基音。我打的是C5,但最高的选择是E7

我将频率分析窗口中的第一个下拉框更改为“增强的自相关”,之后,最高的选择是C5


我在谷歌上搜索了“增强的自相关”,但运气不好。

好吧,如果你能接受GPLv2,为什么不看看Audacity的源代码呢


你很可能会被谐波干扰。您是否尝试过使用正弦波进行测试,以查看您的NAudio的FFT是否在标准范围内

见以下参考资料:


Audacity源代码中
Spectrum.cpp
中的第48行似乎与您想要的非常接近。他们还引用了一个。

音频频谱中的最高峰值不一定是人类感知到的音高,尤其是在具有强烈泛音的声音中。这是因为音调是人类的一种心理感知现象,大脑通常会推断出波形中甚至不存在的频率


频率或基音估计的自相关方法(粗略地说,即使是一个看起来滑稽的和/或非正弦波形在时间上重复,也能找出相距多远)通常更符合人类所说的基音。对自相关算法进行各种增强的原因是,简单的自相关将发现几乎无限多的重复波长(例如,如果它每1秒重复一次,它也会每2秒重复两次,等等)因此,诀窍是对相关性进行加权,以便在统计上更好地匹配人类对同一波形的猜测。

我在谷歌上搜索了“real time pitch detection.net”,得到了这样一个结果:我认为可能你选择了振幅最高的频率(这会给你带来最强的谐波)而不是明显高于噪声层的最低频率(这给了你所演奏的音高)。你看到了吗?你在哪里?盖布。我在寻找振幅最高的频率。谢谢,这解决了我的问题。我会继续尝试Naudio。