Flash 转换FFT数据以匹配计算频谱FFT输出
我习惯于使用Flash 转换FFT数据以匹配计算频谱FFT输出,flash,actionscript-3,audio,fft,Flash,Actionscript 3,Audio,Fft,我习惯于使用SoundMixer.computeSpectrum,但我需要从麦克风中实时获取一些数据(我不能将SoundMixer与麦克风一起使用) 如所示,我在转换FFT数据(从)以匹配ByteArray从computeSpectrum输出时遇到问题。我的现有代码用于处理从computeSpectrum接收的数据(将FFT设置为true) 感谢您的帮助 在您链接的示例代码中,m_mag向量包含光谱数据本身。如果要将其修改为与设计用于computeSpectrum的现有代码一起使用,则应将此向量
SoundMixer.computeSpectrum
,但我需要从麦克风中实时获取一些数据(我不能将SoundMixer与麦克风一起使用)
如所示,我在转换FFT数据(从)以匹配ByteArray
从computeSpectrum
输出时遇到问题。我的现有代码用于处理从computeSpectrum
接收的数据(将FFT
设置为true
)
感谢您的帮助 在您链接的示例代码中,
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);
导入flash.utils.ByteArray;
var fftBytes:ByteArray=newbytearray();
对于(变量i:uint=0;i
然后,您现有的代码可以直接查看fftBytes
,而不是调用computeSpectrum
。请注意,我们在ByteArray
末尾再次复制这些值,以模拟computeSpectrum
始终返回立体声数据,但麦克风是单声道的这一事实。通过调整现有代码以接受mono数据并查看m_mag
向量,而不是将其全部写入ByteArray
,您还可以获得一点速度
此外,您可能需要将代码顶部的
SAMPLE\u RATE
和N
常数分别更改为44100
和9
。这将匹配默认的computeSpectrum
行为,即每个通道返回256个值,采样频率为44100Hz。不清楚您要做什么。您是在尝试为来自麦克风的音频生成动态波形还是…?不。我想分析音频,就像在示例链接中一样,但我需要执行其他分析。非常有用,Mike。我目前正在使用ASFFT(一种基于炼金术的解决方案)来尝试完成这个项目,但我希望在一切就绪后回到纯AS解决方案。非常感谢您的投入!