我正在尝试从插件吉他获取输入,从中获取频率并检查用户是否弹奏了正确的音符。像吉他调音器之类的东西(我也需要做吉他调音器)。
我的第一个问题是,如何实时获取吉他输入的频率?
是否可以做类似的事情:
if (frequency == noteCFrequency)
{
//print This is a C note!!
}
我现在可以从声卡获取输入,录制并播放输入的声音。
最佳答案
有关 C# 中 FFT 的实现,您可以查看 at this 。 虽然我认为您不需要完全理解 FFT 来使用它,但您应该了解一些基本限制:
- 您总是需要一个示例窗口。您可能有一个滑动窗口,但这里快速的本质是获取大量信号并接受一些错误。
- 您有频率的“桶”,而不是精确的频率。结果类似于“在 420Hz - 440Hz 范围内,您拥有 30% 的信号”。 (桶的“宽度”应该是可调的)
- 窗口大小必须包含 2 的幂数的样本。
- 窗口大小必须至少是您要检测的最长波长的两倍。
- 最高频率由采样率给出。 (这个你不用太担心)
- 您希望频率分离得越精确,窗口就越长。
关于c# - 实时获取吉他输入的频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14546619/