我正在尝试从插件吉他获取输入,从中获取频率并检查用户是否正在播放正确的音符。像吉他调音器(我也需要做吉他调音器)。
我的第一个问题是,如何实时获得吉他输入的频率?
是否可以执行以下操作:
if (frequency == noteCFrequency)
{
//print This is a C note!!
}
我现在可以从声卡中获取输入,录制和播放输入声音。
答案 0 :(得分:1)
要在C#中实现FFT,您可以查看at this。 我认为您不需要完全理解使用它的FFT,您应该了解一些基本限制:
答案 1 :(得分: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?
答案 2 :(得分:0)
您必须计算一段信号的FFT -Fast傅立叶变换并寻找峰值。对于各种FFT,窗口类型,窗口大小......您必须阅读一些有关信号处理的文档。无论如何,25毫秒的窗口是可以的,例如使用汉明窗口。在网上有很多用于计算FFT的代码。祝你好运!