Аудио файл подписан 16-битным PCM, с частотой дискретизации = 44100, размером кадров = 2, длиной кадра = 114048.
Я предполагаю, что у вас есть только одинканал (2-байтовые выборки * 1 канал = 2-байтовые кадры).
Первый шаг - получить данные в виде последовательности 16-битного интегрального типа, который в Java равен short
.
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);
Теперь, как вы преобразуете это в float
s, зависит от того, как функции в нисходящем направлении ожидают представления звука.Например, если они ожидают числа с плавающей запятой> = -1 и <= 1, вы можете сделать это: </p>
float[] audioFloats = new float[audioShorts.length];
for (int i = 0; i < audioShorts.length; i++) {
audioFloats[i] = ((float)audioShorts[i])/0x8000;
}
К сожалению, существует множество способов представления звука.