我目前使用的GDX庫com.badlogic.gdx.audio.analysis.FFT和方法:使用GDX圖書館和FFT計算出頻率(JAVA)
private float[] fft(int N, int fs, float[] array) {
float[] fft_cpx, tmpr, tmpi;
float[] res = new float[N/2];
// float[] mod_spec =new float[array.length/2];
float[] real_mod = new float[N];
float[] imag_mod = new float[N];
double[] real = new double[N];
double[] imag = new double[N];
double[] mag = new double[N];
double[] phase = new double[N];
float[] new_array = new float[N];
// Zero Pad signal
for (int i = 0; i < N; i++) {
if (i < array.length) {
new_array[i] = array[i];
}
else {
new_array[i] = 0;
}
}
FFT fft = new FFT(N, 8000);
fft.forward(new_array);
fft_cpx = fft.getSpectrum();
tmpi = fft.getImaginaryPart();
tmpr = fft.getRealPart();
for (int i = 0; i < new_array.length; i++) {
real[i] = (double) tmpr[i];
imag[i] = (double) tmpi[i];
mag[i] = Math.sqrt((real[i] * real[i]) + (imag[i] * imag[i]));
phase[i] = Math.atan2(imag[i], real[i]);
/**** Reconstruction ****/
real_mod[i] = (float) (mag[i] * Math.cos(phase[i]));
imag_mod[i] = (float) (mag[i] * Math.sin(phase[i]));
}
fft.inverse(real_mod, imag_mod, res);
return res;
}
如何做,然後我用這個方法找出從麥克風錄製的聲音的頻率(然後記錄)?
對於麥克風輸入,我有點麻煩。我以爲我發現如何用javax.sound來做到這一點,但我使用的是沒有該包的Android SDK。我想我需要使用android.media.audiorecord,但我不知道如何以及沒有太多可以找到的信息。有沒有可以給我的建議/信息?其他一切看起來不錯。 – JoshSchellenberger
你應該重申你的問題爲Android,如果你與麥克風輸入鬥爭,你可以開始通過生成sin函數的測試輸入,搜索帶有麥克風輸入的Android示例項目 – nio