理解 soundMixer.computeSpectrum

Making sense of soundMixer.computeSpectrum

我在 Internet 上可以找到的所有示例都只是可视化函数的结果数组 computeSpectrum,但我的任务是其他事情。

我生成了一个音符,我需要通过分析结果数组来判断正在播放的音符。我想通了,我需要将函数调用的第二个参数 'FFTMode' 设置为 true,然后设置 returns 声音频率。我认为它真的应该 return 只有一个非零值,我可以用它来确定我使用 Math.sin 函数生成的音符,但事实并非如此。

有人可以建议我如何完成任务吗?使用 soundMixer.computeSpectrum 是一项要求,因为我稍后要分析更复杂的声音。

FFT 会将您的信号 window 转换为一组奈奎斯特正弦波,因此除非 440Hz 是其中之一,否则您将获得不止一个非零值价值!对于单个正弦波,由于混叠,您将获得 2 个频率。举个例子:

正如您所见,对于精确的奈奎斯特频率,FFT 响应是单峰,但对于附近的频率,有更多的峰。

由于信号的形状,您可以获得具有峰值而不是离散值的连续频谱。

i-th 样本的频率是 f(i)=i*samplerate/N,其中 i={0,1,2,3,4,...(N/2)-1} 是样本索引(第一个是 DC 偏移,所以不是 0) 和 N 是传递给 FFT.

的样本数

所以如果你想检测一些谐波(单个基频的倍数)然后设置 samplerateN 所以 samplerate/N 是基频或它的分频器。这样一来,您将只获得谐波正弦波的一个峰值。简化计算。