Java/Android - Distorted Audio using FFT in realtime
this question is most relevant for users with experience using the JTransform package for Fast Fourier Transforms. I'm attempting to eventually create an equalizer as part of a larger realtime audio project. Right now I was simply attempting to apply the Fourier transform, then use the inverse method to get back the original data, then output that audio. What I'm getting is highly distorted audio. I wonder if anyone has any experience doing this sort of thing?
I apply the transform in a callback method after sampling the audio input.
public void onMarkerReached(AudioRecord recorder)
double[] input = new double[buffers[ix].length];
for(int i=0;i<input.le开发者_运维知识库ngth;i++)
{
input[i] = (double)buffers[ix][i];
}
DoubleFFT_1D ft = new DoubleFFT_1D(input.length);
ft.realForward(input);
//some filtering here
ft.realInverse(input, false);
for(int i=0;i<input.length;i++)
{
buffers[ix][i] = (short)input[i];
}
player.write(buffers[ix], 0,
buffers[ix].length);
}
}
Am I losing part of the signal as a result of only keeping the real part of the transform? Since it's only audio data the input should be real-only, right? Not sure what I'm doing wrong here, any input would be greatly appreciated!
I tested your snippet, using ft.realInverse(input, true); along with proper sample size fixed the distortion for me.
精彩评论