2010-11-21 54 views
2

我想制作一个程序来检测麦克风前面正在播放的音符。我正在测试Naudio的FFT函数,但是我在大胆的测试中似乎没有正确检测到音高。我打了一个C5,但最高的选择是在E7。如何在.Net中进行实时音高检测?

我将频率分析窗口中的第一个下拉框改为“enchanced autocorrelation”,之后最高点位于C5。

我搜索了“加强自相关”,没有运气。

+0

我谷歌搜索“实时音高检测.net”,并得到这个:http://stackoverflow.com/questions/1466968/real-time-pitch-detection-using-fft – 2010-11-21 04:45:16

+1

我认为,也许你正在选择具有最高幅度的频率(它给你最强的谐波),而不是最低频率,它明显高于本底噪声(这可以让你播放音调)。 – Gabe 2010-11-21 04:46:10

+1

你见过http://www.nicholson.com/rhn/dsp.html#1吗? – Gabe 2010-11-21 05:00:07

回答

1

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

频率或音高估计的自动相关方法(大致上,发现即使看起来很滑稽和/或非正弦曲线的波形在时间上重复甚至相距甚远)通常更适合于人类所称的音高。对自相关算法进行各种改进的原因是,简单的自相关会找到接近无限的重复波长(例如,如果它每1秒重复一次,它也会每2秒重复两次,等等)。所以诀窍是将相关性加权为以某种方式在统计上更好地匹配人类对相同波形的猜测。