【问题标题】:FFT results vary depending on which computer I useFFT 结果因我使用的计算机而异
【发布时间】:2014-06-16 23:26:12
【问题描述】:

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

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

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

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

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

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

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

最好的祝福

菲尔

【问题讨论】:

标签: c# unity3d fft pitch-detection


【解决方案1】:

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

【讨论】:

  • 你的传奇!那是现场,正是正在发生的事情。以防万一其他人遇到类似问题,我通过使用以下方法在 Start 函数中设置采样率来解决它: samplerate = AudioSettings.outputSampleRate;而不是手动设置。非常感谢保罗的帮助!
  • 不客气 - 我的精神力量今天显然运作良好 - 我可能应该趁有机会去投注世界杯比赛...... ;-)
猜你喜欢
  • 2010-11-09
  • 1970-01-01
  • 1970-01-01
  • 2016-04-17
  • 1970-01-01
  • 2013-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多