我有一个Java语音文件,当我读AudioInputStream
并将其转换为字节数组时,我得到-128
和127
之间的值。我需要将这些值转换为-32768
和32767
之间的范围。所以我认为我需要将Java数组中的每两个值组合成一个值。
在Python中,我可以读取文件,我可以通过numpy.fromstring
函数将其转换为字符串。假设我将uint8
值存储在B中的A,uint16
值中。
A[2*i] = -50
A[2*i+1] = 21
B[i] = 5582
我有这样的价值观。不知何故,我认为我需要将A中的每两个值组合起来才能拥有B.我怎么能用Java做到这一点?
答案 0 :(得分:0)
byte[] b = { 37, -39, -112, -32, 123, -40, -114, 121 };
short[] s = new short[b.length / 2];
ByteBuffer buf = ByteBuffer.wrap(b);
// buf.order(ByteOrder.LITTLE_ENDIAN);
for (int i = 0; i < s.length; i++)
s[i] = buf.getShort();
System.out.println(Arrays.toString(b));
System.out.println(Arrays.toString(s));
输出(big-endian,默认值):
[37, -39, -112, -32, 123, -40, -114, 121]
[9689, -28448, 31704, -29063]
输出(little-endian,取消注释该行):
[37, -39, -112, -32, 123, -40, -114, 121]
[-9947, -8048, -10117, 31118]