理解soundMixer.computeSpectrum

时间:2017-05-27 15:06:53

标签: actionscript-3 math audio

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

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

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

1 个答案:

答案 0 :(得分:2)

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

aliasing

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

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

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

因此,如果您想要检测某些谐波(单个基频的倍数),请设置samplerateN,以便samplerate/N是它的基频或分频器。这样你就可以获得谐波sinwaves的一个峰值。放宽计算。