FFT结果取决于我使用的计算机

时间:2014-06-16 23:26:12

标签: c# unity3d fft pitch-detection

我正在使用Unity3D进行音高检测项目。我对编码,统一和新的非常陌生。几乎我目前正在做的其他事情! :-) 我遇到了这个网页,它帮助我开始使用我的项目中的FFT代码:

http://www.kaappine.fi/tutorials/fundamental-frequencies-and-detecting-notes/

它的工作效果非常好,但检测到的频率似乎因我使用的电脑而异。我已经在各种台式机上试过它了。笔记本电脑(pc& mac的混合物),在某些计算机上它可以获得正确的频率,但在其他计算机上,它会给我一个大约的频率。 1.5半音平。有趣的是,在我尝试过的6台计算机中,有3台是正确的,其他3台都是相同的1.5半音平面。

由于我在某些计算机上尝试过内置麦克风以及单独的麦克风并且结果没有变化,因此无法使用麦克风。

有谁知道这可能是什么原因以及我如何解决这个问题?我可以对代码进行任何调整吗?我正在开发的项目最终将作为iPhone应用程序发布,因此我需要它在各种设备上普遍使用。

顺便说一句,我现在只能使用C#编程语言。

非常感谢任何帮助&建议

祝福

菲尔

1 个答案:

答案 0 :(得分:2)

1.5半音恰好与48 kHz和44.1 kHz采样率之间的比率相同。我的猜测是你有48 kHz的硬编码作为你的采样率,但是你的一些计算机实际上使用的是44.1 kHz的采样率(或反之亦然)。您应该使用合适的API来确定使用的采样率,或者自己明确设置。

数学:

  • 1.5半音的比例为2^(1.5/12) = 1.09
  • 48 kHz与44.1 kHz之间的比率= 48/44.1 = 1.09