2011-05-30 31 views
3

我习惯于使用SoundMixer.computeSpectrum,但我需要从麦克风中获取一些数据(并且我无法使用带有麦克风的SoundMixer)。转换FFT数据以匹配ComputeSpectrum FFT输出

我无法翻译FFT数据(来自this class),如this excellent spectral analysis example所示,以匹配从computeSpectrum输出的ByteArray。我现有的代码用于处理从computeSpectrum收到的数据(FFT设置为true)。

任何帮助表示赞赏!

+0

目前尚不清楚你想要做什么。您是否试图为从麦克风进入的音频生成动态波形或...? – 2011-05-30 01:27:54

+0

不可以。我想分析音频,就像在示例链接中一样,但我需要执行其他分析。 – 2011-05-30 05:36:16

回答

2

在您已链接的示例代码中,m_mag矢量本身包含光谱数据。如果你想修改它与现有的,旨在与computeSpectrum工作代码工作,你应该写在这个向量中的值到ByteArray像这样:然后

import flash.utils.ByteArray; 

var fftBytes:ByteArray = new ByteArray(); 
for(var i:uint = 0; i < N/2; i++) 
{ 
    var re:Number = m_tempRe[i]; 
    var im:Number = m_tempIm[i]; 
    var mag:Number = re*re + im*im; 
    // Old method: write to vector 
    // m_mag[i] = Math.sqrt(sample); 
    // New method: write to ByteArray 
    fftBytes.writeFloat(mag); 
} 
// microphone is mono, so make a copy to match computeSpectrum's stereo output 
fftBytes.writeBytes(fftBytes, 0, fftBytes.length); 

现有的代码可以看看fftBytes直接代替致电computeSpectrum。请注意,我们在ByteArray的末尾第二次复制这些值,以模拟computeSpectrum始终返回立体声数据的事实,但麦克风是单声道的。您也可以通过调整现有代码来接受单色数据并查看m_mag矢量,而不是将它全部写入ByteArray,以获得一点速度。

此外,您可能需要将代码顶部的SAMPLE_RATEN常数分别更改为441009。这将匹配默认的返回每个通道256个值(以44100Hz采样)的行为。

+0

非常有帮助,迈克。我目前正在使用ASFFT(一种基于炼金术的解决方案)来尝试完成该项目,但我希望一旦一切就绪,我就可以回到纯粹的AS解决方案。非常感谢您的意见! – 2011-08-09 23:03:06