Android Visualizer回调onFftDataCapture提供了fft数据的字节数组。数据是否配对为实字节/虚字节?我想知道以下伪代码是否正确?
for(int i=0;i<fft.length;i+=2) {
byte real = fft[i];
byte imag = fft[i+1];
long magnitudeSquare = real*real + imag*imag;
}
提前感谢您的帮助。
答案 0 :(得分:2)
对于那些感兴趣的人,我的逻辑似乎是正确的,因为我看到我的仪表与扬声器的响度同步移动。我认为这是缺乏更权威答案的正确答案。
的问候,
彼得
答案 1 :(得分:0)
这适用于我使用Xamarin Studio。根据需要进行调整。 请记住,实数和虚数实际上是一个带符号的字节。 这种转换将为你提供毕达哥拉斯量级的标准化-1到+1范围。
public void OnFftDataCapture(Visualizer visualizer, byte[] bytes, int samplingRate)
{
float[] fft = new float[bytes.Length/2];
for(int i=0;i<fft.Length;i++)
{
float real = (float)(sbyte)(bytes[(i*2)+0])/128.0f;
float imag = (float)(sbyte)(bytes[(i*2)+1])/128.0f;
fft[i] = ((real*real)+(imag*imag));
}
}