首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >转换快速傅立叶变换数据以匹配ComputeSpectrum快速傅立叶变换输出

转换快速傅立叶变换数据以匹配ComputeSpectrum快速傅立叶变换输出
EN

Stack Overflow用户
提问于 2011-05-30 09:04:31
回答 1查看 1.2K关注 0票数 3

我习惯于使用SoundMixer.computeSpectrum,但我需要从麦克风中实时获取一些数据(并且我不能将SoundMixer与麦克风一起使用)。

我在转换this excellent spectral analysis example中显示的快速傅立叶变换数据(来自this class)以匹配来自computeSpectrumByteArray输出时遇到了问题。我的现有代码是用来处理从computeSpectrum ( FFT设置为true)接收的数据的。

如有任何帮助,我们不胜感激!

EN

回答 1

Stack Overflow用户

发布于 2011-08-08 14:23:34

在您链接的示例代码中,m_mag向量包含光谱数据本身。如果要修改它以使用设计为使用computeSpectrum的现有代码,则应将此向量中的值写入ByteArray,如下所示:

代码语言:javascript
复制
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。这将匹配默认的computeSpectrum行为,即每通道返回256个值,采样频率为44100 at。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6171456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档