我一直在玩Web Audio。我有一个简单的振荡器节点以context.sampleRate / analyzerNode.fftSize * 5(在这种情况下为107.666015625)的频率播放。当我调用analyzer.getByteFrequencyData时,我希望它在第5个bin中有一个值,而在其他地方没有。我实际看到的是[0,0,0,240,255,255,255,240,0,0...]
为什么我在多个分档中获取值?
答案 0 :(得分:1)
webaudio AnalyserNode在计算FFT之前应用Blackman窗口。这个窗口功能会涂抹单音。
答案 1 :(得分:0)
必须这样做,你的序列是有限的,因此你的信号应该持续有限的时间。当然,您正在使用矩形窗口计算FFT,即您的信号仅考虑生成样本的数量,并且#34;不连续性" (即信号具有有限数量的样本的事实)创建spectral leakage。为了最大限度地减少这种影响,您可以尝试几种窗口函数,这些函数在FFT计算之前应用于您的数据,可以减少这种影响。
答案 2 :(得分:0)
通过使用对您的数据或算术格式来说太大的测试信号,您可能会在计算中的某处剪切。请使用浮点格式再次尝试。