c# - 实时获取吉他输入的频率

标签 c# signal-processing naudio

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

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

是否可以做类似的事情:

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

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

最佳答案

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

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

关于c# - 实时获取吉他输入的频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14546619/

相关文章:

c# - 在 Unity 中找不到 rigidBody2D.MovePosition

matlab - 如何在matlab中找到主峰(fft)

c - 纯 C 中 RSA 实现的库

python - 找出两个相似波形之间的时间偏移

c# - 使用 NAudio 播放原始 PCM(输出噪音,但在 Audacity 中打开正常)

c# - 从 WasapiLoopbackCapture 捕获音频,并转换为 muLaw

c# - 使用NAudio C#减少映射扬声器和麦克风音量的延迟

javascript - "Gmail style"Web表单的部分更新

C# 正则表达式删除 C 风格注释并提取括号之间的文本

c# - Acumatica 自动化步骤