0

我制作了一个使用 AudioRecord 和 16 位编码从手机麦克风录制的应用程序,并且我能够播放录音。出于某种兼容性原因,我需要使用 8 位编码,但是当我尝试使用该编码运行相同的程序时,我不断收到无效的音频格式。我的代码是:

int bufferSize = AudioRecord.getMinBufferSize(11025, 
AudioFormat.CHANNEL_CONFIGURATION_MONO, 
AudioFormat.ENCODING_PCM_8BIT);
AudioRecord recordInstance = new AudioRecord(
MediaRecorder.AudioSource.MIC, 11025,
 AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_8BIT,
bufferSize);

有谁知道是什么问题?根据文档 AudioRecord 能够进行 8 位编码。

4

1 回答 1

0

如果你看源码,它只支持little endian,但Android正在写出big endian。所以你必须先转换为小端,然后再转换为 8 位。这对我有用,您可以将两者结合起来:

for (int i = 0; (offset + i + 1) < bytes.length; i += 2) {
    lens[i] = bytes[offset + i + 1];
    lens[i + 1] = bytes[offset + i];
}
for (int i = 1, j = 0; i < length; i += 2, j++) {
    lens[j] = lens[i];
}

这是一个没有字节序的更简单的版本

for (int i = 0, j = 0; (offset + i) < bytes.length; i += 2, j++) {
    lens[j] = bytes[offset + i];
}
于 2010-03-11T17:47:39.610 回答