我知道我绝对不是第一个询问使用FFT来查找Android的AudioRecord频率的人,但在阅读了大量的论坛后,我仍然不太了解它。
我最终使用的是ComplexDoubleFFT类,Herschel Common Science System的一部分和类似于here的代码。
AudioRecord recorder = new AudioRecord(MediaRecorder.AudioSource.MIC, rate, channelConfig, audioFormat, bufferSize);
...
double[] micBufferData = new double[audioData.length];
int x=0;
for(short data : audioData)
{
micBufferData[x] = data;
x++;
}
FFT newFFT = new FFT(bufferSize/2);
newFFT.ft(micBufferData);
接下来要做的事情基本上与上面已经提到过的线程相同,因为它适用于它们。但是,他们有一个名为toTransform的数组,我不确定他们从哪里得到它。我假设这是他们的FFT值列表,但我不知道如何获得值!我已经浏览了ComplexDoubleFFT的类文件,它甚至无处返回其输出。希望我所说的一切都不会令人困惑。非常感谢任何帮助!
答案 0 :(得分:0)
我明白了。 ComplexDoubleFFT类中的函数ft会更改动态传递的数组。如果其他人需要帮助这样做(或者只是帮助在Android中使用FFT),请在这里留言,我会详细说明。