我习惯于使用SoundMixer.computeSpectrum,但我需要从麦克风中实时获取一些数据(并且我不能将SoundMixer与麦克风一起使用)。
我在转换this excellent spectral analysis example中显示的快速傅立叶变换数据(来自this class)以匹配来自computeSpectrum的ByteArray输出时遇到了问题。我的现有代码是用来处理从computeSpectrum ( FFT设置为true)接收的数据的。
如有任何帮助,我们不胜感激!
发布于 2011-08-08 14:23:34
在您链接的示例代码中,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。这将匹配默认的computeSpectrum行为,即每通道返回256个值,采样频率为44100 at。
https://stackoverflow.com/questions/6171456
复制相似问题