我正在尝试通过以下代码从麦克风中读取原始数据:
short buffer[] = new short[AudioRecord.getMinBufferSize(8000,
AudioFormat.CHANNEL_IN_MONO,
AudioFormat.ENCODING_PCM_16BIT)];
Log.d("O_o",""+buffer.length);
AudioRecord rec = new AudioRecord(
MediaRecorder.AudioSource.MIC, 8000,
AudioFormat.CHANNEL_IN_MONO,
AudioFormat.ENCODING_PCM_16BIT, buffer.length);
rec.startRecording();
int read = rec.read(buffer, 0, buffer.length);
for (int i = 0; i < read; i++) {
Log.d("O_o",i+" "+buffer[i]);
}
rec.stop();
rec.release();
但缓冲区总是填充257个值。 怎么了?
UDP:看起来像我的初始值。在循环中调用read()会导致正常值。
答案 0 :(得分:1)
你绝对应该看看this question + answer。它显示了一些可以极大地改进代码的代码。
基本上,你的问题是你试图同步阅读它。音频过程通常必须异步实现,并且您将在任何时候获得256字节大小的音频块。