我习惯使用SoundMixer.computeSpectrum
,但我需要从麦克风中即时获取一些数据(我不能将SoundMixer与麦克风一起使用)。
我无法翻译FFT数据(来自this class),如this excellent spectral analysis example所示,以匹配ByteArray
的{{1}}输出。我的现有代码用于处理从computeSpectrum
收到的数据(computeSpectrum
设置为FFT
)。
感谢任何帮助!
答案 0 :(得分: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_RATE
和N
常量分别更改为44100
和9
。这将匹配每个通道返回256个值的默认computeSpectrum
行为,以44100Hz采样。