我有AudioInputStream
并使用ByteArrayOutputStream
从中检索了字节,但是当将其转换为浮点数时,数字比预期的要大很多。这是下面的代码,音频样本是每个样本16位和2个通道。
float[] f = new float[bytes.length / 4];
for (int i = 0, j = 0; i != f.length; ++i, j += 4) {
short left = (short) ((bytes[i] & 0xff) | (bytes[i + 1] << 8));
short right = (short) ((bytes[i + 2] & 0xff) | (bytes[i + 3] << 8));
float avg = left + right;
avg = avg / 2;
f[i] = avg;
}
转换为字节的代码:
byte[] data = null;
try {
final ByteArrayOutputStream baout = new ByteArrayOutputStream();
byte[] buffer = new byte[(bytePerFrmame == AudioSystem.NOT_SPECIFIED ? 1 * 1024 : bytePerFrmame * 1024)];
int c;
while ((c = din.read(buffer, 0, buffer.length)) != -1) {
baout.write(buffer, 0, c);
}
baout.close();
data = baout.toByteArray();
} catch (Exception e) {
e.printStackTrace();
}
return data;