2

如何使用 FP9 计算 As3 中的频率和幅度。我得到了所有原始字节使用

SoundMixer.computeSpectrum(_testbytes, false, 0);
var g:Graphics = this.graphics;  
g.clear();       
g.lineStyle(0, 0x6600CC);
g.moveTo(0, PLOT_HEIGHT);            
var m:Number = 0;
for (var i:int = 0; i < 256; i++) {
    m = (_testbytes.readFloat() * 100);
    g.lineTo(i*2 , 100 - m);
}
g.lineTo(CHANNEL_LENGTH * 2, PLOT_HEIGHT);

现在我可以从中获取频率和幅度数据吗?

4

1 回答 1

2

如果您仔细查看computeSpectrum()文档,您会看到第二个参数设置了 FFT 模式。

FFT 代表 FastFourierTransform,基本上,如果您在波形上使用 FFT,您将进入频域,这意味着您拥有按频率为您排序的值,而不是原始值。

您需要在代码中更改的是:

SoundMixer.computeSpectrum(_testbytes, true);

现在在 _testbytes 中您将有 512 个值,左声道为 256,右声道为 256。对于每个频道,数字按频率排序,从低到高(我猜是低、中低、中高、高)。

就是这样,你现在有了频率。SoundTransform 有音量,我猜这是振幅的另一种说法。如果您想在其中一些频率或 leftPeak 和 rightPeak 上执行 Math.max(),那就去做吧。

如果您想对此感到厌烦,只需在维基百科或 DSP(数字信号处理)或声音处理上查找 FFT,否则,computeSpectrum 的 as3 文档就足够了。

至于采样率,这个很酷的库似乎为你做了艰苦的工作。

HTH,乔治

于 2009-11-27T01:33:13.847 回答