理解 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.
的样本数
所以如果你想检测一些谐波(单个基频的倍数)然后设置 samplerate
和 N
所以 samplerate/N
是基频或它的分频器。这样一来,您将只获得谐波正弦波的一个峰值。简化计算。
我在 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.
所以如果你想检测一些谐波(单个基频的倍数)然后设置 samplerate
和 N
所以 samplerate/N
是基频或它的分频器。这样一来,您将只获得谐波正弦波的一个峰值。简化计算。