Android录音程序之写入数据

网上一般给出的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(); 
                } 
            } 
        } 

相关推荐