在Android中的8位字节数组上存储16Bit Audio

时间:2012-11-29 23:57:45

标签: java android audio audio-recording pcm

我很困惑。我需要在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方法可以保存记录数据到字节数组。

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

1 个答案:

答案 0 :(得分:0)

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

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