私は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 ライブラリは使用に適していますか、それとも不足していますか?