PCM 16bit记录字节与短

时间:2017-11-07 18:49:22

标签: android audio signal-processing pcm

我正在尝试在Android上录制音频。我找到了不同的例子,但有一点我不明白。

有些人写shorts,其他bytes

以下是将short转换为bytes的示例。

   private byte[] short2byte(short[] sData) {
        int shortArrsize = sData.length;
        byte[] bytes = new byte[shortArrsize * 2];
        for (int i = 0; i < shortArrsize; i++) {
            bytes[i * 2] = (byte) (sData[i] & 0x00FF);
            bytes[(i * 2) + 1] = (byte) (sData[i] >> 8);
            sData[i] = 0;
        }
        return bytes;

    }

这样做的目的是什么?为什么不直接将shorts写入文件,就我们使用PCM 16bit而言。

请从音频角度解释此事。

由于

1 个答案:

答案 0 :(得分:1)

在Java中,你不能直接写短片&#34;因为没有API采用短数组并将其写入文件。您只能将字节数组写入二进制文件。主要问题是字节序(LSB优先或MSB优先):没有标准的字节序。

因此,您有两种选择:

  • 使用由ShortBuffer支持的小端ByteBuffer来编码短数组
  • 只需将短片编码为字节,这就是您发布的代码。