AudioInputStream字节到浮点转换

时间:2016-01-10 00:45:25

标签: java signal-processing

我有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;

0 个答案:

没有答案