網上一般給出的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();
}
}
}
更多Android相關信息見Android 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=11