网上一般给出的Android录音程序例子中,写入数据到文件核心代码如下:
while (isRecord == true) {
readsize = audioRecord.read(audiodata, 0, bufferSizeInBytes);
if (AudioRecord.ERROR_INVALID_OPERATION != readsize && fos!=null) {
try {
fos.write(audiodata);
} catch (IOException e) {
e.printStackTrace();
}
}
}
这里面有个明星的错误,就是每次read出来的数据,很可能不能把整个缓冲区audiodata充满。
所以,read方法才返回一个int表示实际接收到的数据数。实际测试也证明了这一点。
因此,直接把audiodata写入到文件,是完全错误的,导致写入了很多错误数据。
正确的做法是:
while (isRecord == true) {
readsize = audioRecord.read(audiodata, 0, bufferSizeInBytes);
if (AudioRecord.ERROR_INVALID_OPERATION != readsize && fos!=null) {
try {
fos.write(audiodata,0, readsize); // 只从当前位置,写入到实际读到的字节数
} catch (IOException e) {
e.printStackTrace();
}
}
}