2014-06-16 26 views
1

我正在使用Unity3D进行基音检测项目。我很新的编码,团结&几乎我目前正在努力的一切!FFT结果取决于我使用的计算机

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

它主要的工作真的很好,但检测出的频率似乎取决于哪个改变::-) 我碰到这个网页,帮助让我去和我用我的项目中FFT代码来我用的电脑。我曾尝试过在各种台式机上使用笔记本电脑(混合使用PC & mac),并且在某些计算机上它可以获得正确的频率,但在其他计算机上,它给了我大约一个频率的频率。 1.5个半音平。有趣的是,在我试过的6台电脑中,有3个是正确的,另外3个都是1.5个半音。

它不能下到麦克风,因为我已经尝试了一些计算机上的内置麦克风以及单独的麦克风,结果没有变化。

有没有人有任何想法可能是什么原因,我怎么能解决这个问题?我可能会对代码做出任何调整?我正在开发的项目最终将作为iPhone应用程序进行分发,因此我需要它可以跨设备进行通用工作。

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

提前许多感谢所有帮助&建议

最良好的祝愿

菲尔

+2

您是否检查您使用的采样率是否在设备最小/最大支持率内(请参阅http://docs.unity3d.com/ScriptReference/Microphone.GetDeviceCaps.html)? – SleuthEye

回答

2

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

数学:

  • 1.5半音是2^(1.5/12) = 1.09的比率。
  • 48kHz和44.1kHz之间的比率= 48/44.1 = 1.09
+2

你的传奇!这就是现实,发生了什么。为了防止其他人遇到类似的问题,我通过使用以下代码设置开始函数中的采样率来得到它:samplerate = AudioSettings.outputSampleRate;而不是手动设置。非常感谢您的帮助保罗! – Philsko

+0

不客气 - 我的心理能力显然今天运作良好 - 我应该去世界杯比赛打赌,而我有机会...... ;-) –