我如何在.NET中进行实时音高检测?
-
26-09-2019 - |
题
我想制作一个程序,以检测在麦克风前播放的音符。我正在测试Naudio的FFT功能,但是通过我在Audacity进行的测试,FFT似乎无法正确检测到音高。我打了C5,但最高的选秀权是E7。
我将“频率分析”窗口中的第一个下拉框更改为“嵌套自相关”,之后最高的选择是C5。
我用谷歌搜索了“封闭的自相关”,没有运气。
解决方案
音频频谱中的最高峰不一定是人类会认为它的音乐音调,尤其是在具有强烈色彩的声音中。那是因为音调是人类的心理知觉现象,大脑通常会推断出波形中甚至不存在的频率。
自动相关方法的频率或音高估计方法(大致发现,即使是一个有趣的和/或非sinsoidal波形重复的相距距离,也通常是人类所谓的音调的更好匹配。对自相关算法进行各种增强功能的原因是,简单的自相关将发现几乎无限数量的重复波长(例如,如果每2秒重复一次,则每2秒也重复两次,等等),因此诀窍是将相关性加重到将相关性加重到相关性从统计学上讲,以某种方式更好地匹配了人类对同一波形的猜测。
其他提示
您可能会被谐波抛弃。您是否尝试过用正弦波进行测试,以查看您的Naudio的FFT是否在球场上?
查看以下参考:http://cnx.org/content/m11714/latest/
http://www.gamedev.net/community/forums/topic.asp?topic_id=506592&whichpage=1
第48英寸 Spectrum.cpp
在Audacity中,源代码似乎与您想要的内容接近。他们也引用了 IEEE纸,托洛宁和卡尔贾兰宁.
好吧,如果您可以使用GPLV2生活,为什么不窥视Audacity源代码呢?
不隶属于 StackOverflow