我目前正在尝试使用Android来检测通过手机麦克风播放的特定音频频率范围。我已经使用AudioRecord
类设置了该类:
int channel_config = AudioFormat.CHANNEL_CONFIGURATION_MONO;
int format = AudioFormat.ENCODING_PCM_16BIT;
int sampleSize = 8000;
int bufferSize = AudioRecord.getMinBufferSize(sampleSize, channel_config, format);
AudioRecord audioInput = new AudioRecord(AudioSource.MIC, sampleSize, channel_config, format, bufferSize);
随后,音频被读取:
short[] audioBuffer = new short[bufferSize];
audioInput.startRecording();
audioInput.read(audioBuffer, 0, bufferSize);
由于我在这个领域几乎没有经验,所以我在执行FFT时遇到了问题。我一直在尝试使用这个类:
然后我发送以下值:
Complex[] fftTempArray = new Complex[bufferSize];
for (int i=0; i<bufferSize; i++)
{
fftTempArray[i] = new Complex(audio[i], 0);
}
Complex[] fftArray = fft(fftTempArray);
我可能误解了这个类的工作方式,但返回的值跳来跳去,即使在静音状态下也不代表一致的频率。有人知道如何执行此任务吗?或者我是不是过于复杂化了问题,试图仅获取少量的频率范围而不是将其绘制为图形表示?