调谐器应用:如何找到频率?

时间:2011-02-17 17:01:24

标签: c# silverlight-4.0

问候,

我目前正在使用Silverlight / c#为类项目开发一个调谐器应用程序。我遇到的问题似乎被很多人提出但没有真正回答。我已经阅读了很多论坛并搜索了几个小时,但仍然无法真正掌握代码和数学。到目前为止我所拥有的是:

Mic =>音频输入=>音频样本被写入内存流=>字节转换为双精度然后复数= = FFT()返回一个复数数组...

我读过有关FFT / DFT /自相关/等的内容。在我看来,FFT是我想要速度的方式。基本上,我将乐队/乐团/等中使用的半音调调音器变成在线应用程序,所以一切都需要实时完成。现在我只是专注于试图了解整个过程。

问题:

  1. 将写入内存流的字节转换为复数的正确方法是什么?这部分回答Convert Audio samples from bytes to complex numbers?,但我不知道哪个是正确的方法,每个结果会产生不同的值。

  2. 我理解FFT的基础知识,但不完全确定数字在不同阶段代表什么。例如,当进入fft算法时,复数数组的确切代表什么,以及它们在离开时代表什么?

  3. 在计算FFT后,需要进行哪些其他处理才能找到正在播放的音符的频率?

  4. 我感谢所有的帮助,这个项目已经证明比我正在研究的更复杂! :/

    干杯谢谢!

    约什

1 个答案:

答案 0 :(得分:2)

1)没什么'

2)FFT返回一组值。每个阵列成员都包含该频段内信号的强度。

3)首先,找到具有最强值的数组成员。要拨打确切的频率,您可能需要在最强的桶周围的阵列成员之间进行一些插值。

编辑:找到this article。看起来它会为你分解。