问候,
我目前正在使用Silverlight / c#为类项目开发一个调谐器应用程序。我遇到的问题似乎被很多人提出但没有真正回答。我已经阅读了很多论坛并搜索了几个小时,但仍然无法真正掌握代码和数学。到目前为止我所拥有的是:
Mic =>音频输入=>音频样本被写入内存流=>字节转换为双精度然后复数= = FFT()返回一个复数数组...
我读过有关FFT / DFT /自相关/等的内容。在我看来,FFT是我想要速度的方式。基本上,我将乐队/乐团/等中使用的半音调调音器变成在线应用程序,所以一切都需要实时完成。现在我只是专注于试图了解整个过程。
问题:
将写入内存流的字节转换为复数的正确方法是什么?这部分回答Convert Audio samples from bytes to complex numbers?,但我不知道哪个是正确的方法,每个结果会产生不同的值。
我理解FFT的基础知识,但不完全确定数字在不同阶段代表什么。例如,当进入fft算法时,复数数组的确切代表什么,以及它们在离开时代表什么?
在计算FFT后,需要进行哪些其他处理才能找到正在播放的音符的频率?
我感谢所有的帮助,这个项目已经证明比我正在研究的更复杂! :/
干杯谢谢!
约什
答案 0 :(得分:2)
1)没什么'
2)FFT返回一组值。每个阵列成员都包含该频段内信号的强度。
3)首先,找到具有最强值的数组成员。要拨打确切的频率,您可能需要在最强的桶周围的阵列成员之间进行一些插值。
编辑:找到this article。看起来它会为你分解。