【问题标题】:Get frequency from guitar input in real time实时从吉他输入中获取频率
【发布时间】:2013-01-10 21:09:25
【问题描述】:

我正在尝试从插件吉他获取输入,从中获取频率并检查用户是否弹奏了正确的音符。吉他调音器之类的东西(我也需要吉他调音器)。

我的第一个问题是,如何实时获取吉他输入的频率?

是否可以做类似的事情:

if (frequency == noteCFrequency)
{
//print This is a C note!!
}

我现在可以从声卡获取输入,录制和播放输入的声音了。

【问题讨论】:

    标签: c# signal-processing naudio


    【解决方案1】:

    其他答案并没有真正解释如何做到这一点,他们只是有点放弃了他们的手臂。例如,阅读这些答案,您不会知道 FFT 的输出是一组复数,并且您不知道如何解释它们。

    此外,FFT 甚至不是最好的可用方法,尽管就您的目的而言,它工作得很好,而且大多数人认为它是最直观的。无论如何,这个问题已经被问死了,所以我只会向您推荐关于 SO 的其他问题。并非所有都适用于 C#,但您需要先了解(重要的)概念。您可以通过阅读这些问题的答案并点击链接找到问题的答案。

    frequency / pitch detection for dummies

    Get the frequency of an audio file in every 1/4 seconds in android

    How to detect sound frequency / pitch on an iPhone?

    How to calculate sound frequency in android?

    how to retrieve the different original frequency in each FFT caculating and without any frequency leakage in java

    【讨论】:

      【解决方案2】:

      有关 C# 中 FFT 的实现,您可以查看 at this。 虽然我认为您不需要完全了解 FFT 即可使用它,但您应该了解一些基本限制:

      1. 您总是需要一个示例窗口。您可能有一个滑动窗口,但这里快速的本质是获取大量信号并接受一些错误。
      2. 您有频率的“桶”,而不是精确的频率。结果类似于“在 420Hz - 440Hz 范围内,您有 30% 的信号”。 (桶的“宽度”应该是可调的)
      3. 窗口大小必须包含多个 2 的幂的样本。
      4. 窗口大小必须至少是您要检测的最长波长的两个波长。
      5. 最高频率由采样率给出。 (这个不用太担心)
      6. 您希望频率分离得越精确,窗口就越长。

      【讨论】:

        【解决方案3】:

        您必须计算一段信号的 FFT(快速傅立叶变换)并寻找峰值。对于 FFT 的种类、窗口类型、窗口大小......您必须阅读一些有关信号处理的文档。无论如何,一个 25 毫秒的窗口是可以的,例如,使用一个汉明窗口。网上有很多计算 FFT 的代码。祝你好运!

        【讨论】:

        • 我能有更精确的方向吗?我被困住了。 :(也许是因为我对这个太陌生了.. 理解 FFT 太难了..
        • 去维基百科搜索离散傅里叶变换。 FFT 是 DFT 的“快速”版本。 DFT 将一段信号从时域变换到频域。例如,从 0 ms 到 25 ms 的时间轴上表示的信号可以转换为 0 到 2pi 之间的频域信号,而 0 对应于 0 Hz,2pi 对应于 sr Hz,即 sr 信号的采样率(通常为 44.100 Hz,取决于您的配置/音频驱动程序)。很抱歉,这里有很多理论,所以你必须花几个小时来学习这些概念。不要犹豫再问一次。
        • 可以给我你的脸书吗?我想知道更多,实际上我有很多问题。
        • 是的,我的用户名是“perez.didac”。
        • 有更简单的版本吗?像这样pitchtracker.codeplex.com/documentation 我正在使用 NAudio 来获取输入,但我很确定缓冲区的东西,我也不知道由谁来实现它。有什么想法吗?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-20
        • 2017-12-30
        • 1970-01-01
        • 2013-12-18
        • 2016-04-21
        • 1970-01-01
        相关资源
        最近更新 更多