Вы не предоставили нам достаточно информации, чтобы понять, почему вы получаете разные результаты в Matlab и Java.Обычно вы масштабируете данные короткого канала [-32768..32767] до двойного в диапазоне [-1..1], что, похоже, вы пытаетесь сделать.Ваш результат Java: -3.0517578125E-5 является правильным для короткого значения -1: -1/32768.Я не знаю, почему ваш результат Matlab отличается.Вы не показали нам, как вы достигаете результатов Matlab.
Если у вас большая последовательность байтов (что, я полагаю, у вас), и вы не хотите беспокоиться о БОЛЬШИХENDIAN против LITTLE-ENDIAN или сдвигая биты и байты, пусть Java позаботится об этом за вас:
import java.nio.*;
...
ByteBuffer buf = ByteBuffer.wrap(audioBytes);
buf.order(ByteOrder.LITTLE_ENDIAN);
while (buf.remaining() >= 2) {
short s = buf.getShort();
double mono = (double) s;
double mono_norm = mono / 32768.0;
...
}
ByteBuffer.getShort () читает следующие два байта буфера, принимаетзаботится о порядке байтов Little-Endian, преобразует байты в короткие и позиционирует себя для следующего вызова getXXX ().