How To Convert 16-bit Pcm Audio Byte-array To Double Or Float Array?
I'm trying to perform Fast Fourier Transform on a .3gpp audio file. The file contains a small 5 second recording in 44100kHz from the phones microphone. Every Java FFT algorithm I
Solution 1:
There is no alternative. You have to run a loop and cast each element of the array separately.
I do the same thing for shorts that I fft as floats:
publicstaticfloat[] floatMe(short[] pcms) {
float[] floaters = newfloat[pcms.length];
for (int i = 0; i < pcms.length; i++) {
floaters[i] = pcms[i];
}
return floaters;
}
EDIT 4/26/2012 based on comments
If you really do have 16 bit PCM but have it as a byte[], then you can do this:
publicstaticshort[] shortMe(byte[] bytes) {
short[] out = newshort[bytes.length / 2]; // will drop last byte if odd number
ByteBuffer bb = ByteBuffer.wrap(bytes);
for (int i = 0; i < out.length; i++) {
out[i] = bb.getShort();
}
returnout;
}
then
float[] pcmAsFloats = floatMe(shortMe(bytes));
Unless you are working with a weird and badly designed class that gave you the byte array in the first place, the designers of that class should have packed the bytes to be consistent with the way Java converts bytes (2 at a time) to shorts.
Solution 2:
byte[] yourInitialData;
double[] yourOutputData = ByteBuffer.wrap(bytes).getDouble()
Post a Comment for "How To Convert 16-bit Pcm Audio Byte-array To Double Or Float Array?"