1

我正在使用 Unity3D 进行音高检测项目。我对编码、统一以及我目前正在处理的几乎所有其他事情都很陌生!:-) 我遇到了这个网页,它帮助我开始并在我的项目中使用 FFT 代码:

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

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

这不能归结为麦克风,因为我在某些计算机上尝试了内置麦克风以及单独的麦克风,结果没有变化。

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

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

非常感谢您的任何帮助和建议

最良好的祝愿

菲尔

4

1 回答 1

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
于 2014-06-17T07:07:49.633 回答