我正在使用 FFT 库
我的代码运行如下:
int bufferSize = AudioRecord.getMinBufferSize(44100,
AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT);
AudioRecord audioRecord = new AudioRecord(
MediaRecorder.AudioSource.DEFAULT, 44100,
AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, bufferSize);
short[] buffer = new short[blockSize];
double[] toTransform = new double[blockSize];
audioRecord.startRecording();
while (started) {
int bufferReadResult = audioRecord.read(buffer, 0, blockSize);
for (int i = 0; i < blockSize && i < bufferReadResult; i++) {
toTransform[i] = (double) buffer[i] / 22050; // signed 16 bit
}
transformer.ft(toTransform);
}
audioRecord.stop();
我确实得到了一个有效的结果,但问题是输出频率的幅度以某种类似正弦波的方式明显振荡,这有点奇怪,因为它应该是恒定的。
我知道 FFT 通常具有复杂的部分,但上面的库只是提供了真正的价值。这个 FFT 库适合使用还是我遗漏了什么?