1

我很困惑。我需要在 Android 中从 MIC 录制声音,所以我使用了以下代码:

recorder = new AudioRecord(AudioSource.MIC, 44100,
                AudioFormat.CHANNEL_IN_MONO,
                AudioFormat.ENCODING_PCM_16BIT, N);
buffer = new byte[N];
//...
recorder.read(buffer, 0, N);

众所周知,字节数组可以存储-128 到+128 之间的值,而16Bit 声音需要更多的存储空间(例如short 和int),但令人惊讶的是Java 和Android 有一种record方法可以将记录的数据保存到字节数组中。

这怎么可能?我错过了什么?

4

1 回答 1

1

您正在将字节视为一个镜头整数。它只有 8 位。您需要存储 1000111011100000(16 位)吗?第一个字节是 10001110,第二个字节是 11100000。您可以将这些位解释为数字与此处无关。以更一般的方式, byte[] 通常是您处理二进制“原始数据”的方式(让它是音频流​​或加密内容或您将其视为比特流的任何其他内容)。

如果您有 n 个 16 位的“字”,那么您将需要 2n 个字节来存储它。字节 0 将是字 0 的较低(或较高)部分,字节 1 将是字 0 的其余部分,字节 0 将是字 1 的较低(或较高)部分......

于 2012-11-30T00:16:39.120 回答