【问题标题】:How can I do real-time pitch detection in .Net?如何在 .Net 中进行实时音高检测?
【发布时间】:2011-05-13 07:07:10
【问题描述】:

我想制作一个程序来检测麦克风前正在播放的音符。我正在测试 Naudio 的 FFT 功能,但是通过我大胆进行的测试,FFT 似乎无法正确检测音高。我玩的是 C5,但最高的选择是 E7。

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

我在 Google 上搜索了“增强的自相关”,但没有运气。

【问题讨论】:

  • 我在 Google 上搜索了“实时音高检测 .net”并得到了这个:stackoverflow.com/questions/1466968/…
  • 我认为您可能会选择幅度最高的频率(这会为您提供最强的谐波),而不是明显高于本底噪声的最低频率(这会为您提供播放的音高)。
  • 你在哪里对 Gabe。我正在寻找振幅最高的频率。谢谢,这解决了我的问题。我将继续尝试 Nadio。

标签: c# .net vb.net signal-processing fft


【解决方案1】:

你很可能会被谐波甩掉。您是否尝试过使用正弦波进行测试以查看您的 NAudio 的 FFT 是否符合要求?

请参阅以下参考资料: http://cnx.org/content/m11714/latest/

http://www.gamedev.net/community/forums/topic.asp?topic_id=506592&whichpage=1

Audacity 源代码中Spectrum.cpp 中的第 48 行似乎与您想要的很接近。他们还引用了IEEE paper by Tolonen and Karjalainen

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      好吧,如果您可以接受 GPLv2,为什么不看看 Audacity 源代码?

      http://audacity.sourceforge.net/download/beta_source

      【讨论】:

        猜你喜欢
        • 2010-11-30
        • 2010-11-24
        • 2020-07-05
        • 2015-02-06
        • 2013-09-12
        • 1970-01-01
        • 2016-06-12
        • 1970-01-01
        • 2021-01-21
        相关资源
        最近更新 更多