【问题标题】:PCM 16bit recording byte vs shortPCM 16bit 记录字节与短
【发布时间】:2017-11-07 18:49:22
【问题描述】:

我正在尝试在 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

请从音频的角度解释一下这个问题。

谢谢

【问题讨论】:

    标签: android audio signal-processing pcm


    【解决方案1】:

    在 Java 中,您不能“直接编写短裤”,因为没有 API 可以接受一个短数组并将其写入文件。您只能将字节数组写入二进制文件。主要问题是字节序(LSB 优先或 MSB 优先):没有标准的字节序。

    因此你有两个选择:

    • 使用由 ByteBuffer 支持的小端 ShortBuffer 对短数组进行编码
    • 只需自己将短裤编码为字节,这就是您发布的代码的作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-03
      • 1970-01-01
      • 1970-01-01
      • 2016-04-11
      • 1970-01-01
      • 1970-01-01
      • 2016-03-06
      • 1970-01-01
      相关资源
      最近更新 更多