Since we don't have access to your audio file we cannot possibly know whether or not the values you have printed are correct!

Your FFT method just swallows the results! The FFT can be done in place so there is no need to create copies of the data. Just change to

and remove the code to copy the values for the input arrays to the xReal and xImag arrays. By doing this the FFT results will be available in the input arrays.

A quick simple

test of your FFT methd using

indicates that the FFT is probably implemented correctly but one needs to do much more extensive testing to be certain. The 'bit twiddling' is correct.

The decode() method will only work for one format of audio files (little endian signed) so you will need to deal with other encoding.

One major problem you seem to have is in understanding what the results of the FFT mean. For that you need to spend some time learning about spectral estimation which means you will need a thorough understanding of Fourier transforms and in particular the Discrete Fourier Transform. I have a strong background in this and I can help but forums are very poor for '1 on 1' teaching of complex topics so you will need to spend a lot of time reading books and articles.