The audio file is 16 bit PCM signed, with samplerate = 44100, framesize = 2, framelength= 114048.
I'm assuming from the above that you have only a single channel (2 byte samples * 1 channel = 2 byte frames).
First step is to get the data as a sequence of a 16-bit integral type, which is short
in Java.
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.ShortBuffer;
...
byte[] audioBytes = ...
ShortBuffer sbuf =
ByteBuffer.wrap(audioBytes).order(ByteOrder.LITTLE_ENDIAN).asShortBuffer();
short[] audioShorts = new short[sbuf.capacity()];
sbuf.get(audioShorts);
Now how you convert that to float
s depends on how downstream functions expect the audio to be represented. For example if they expect floating point numbers >= -1 and <= 1, then you can do this:
float[] audioFloats = new float[audioShorts.length];
for (int i = 0; i < audioShorts.length; i++) {
audioFloats[i] = ((float)audioShorts[i])/0x8000;
}
Unfortunately there are a lot of ways to represent audio.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…