在我的项目中,我正致力于音频和通话录音功能。我需要合并两个音频文件。对于合并,我写了以下代码:
try {
FileInputStream fistream1 = new FileInputStream(file1); // first
// source file
FileInputStream fistream2 = new FileInputStream(file2);// second
// source file
SequenceInputStream sistream = new SequenceInputStream(fistream1, fistream2);
File audioDir = new File(Environment.getExternalStorageDirectory(), CONSTANTS.PATH_TO_MERGED_AUDIO);
if (!audioDir.exists()) {
audioDir.mkdirs();
}
FileOutputStream fostream = new FileOutputStream(audioDir + "/mergedFile.wav");// destinationfile
int temp;
while ((temp = sistream.read()) != -1) {
fostream.write(temp); // to write to file
}
fostream.close();
sistream.close();
fistream1.close();
fistream2.close();
} catch (Exception e) {
e.printStackTrace();
}
}
现在,问题是我在Note3 OS 4.0.1上运行此代码,它运行正常。但是当我在Nexus4 OS 5.0.1上运行相同的代码时。与Note3相比,它需要5-6分钟。我搜索这个,但dint发现任何结果。请问我在哪里做错了,或者我需要实现另一个用于合并两个音频文件的API。
由于
答案 0 :(得分:0)
我正在回答我自己的问题。我解决了这个问题。最初我怀疑错误可能是硬件特定的。但问题是我写文件的方式。
byte[] buf = new byte[1024];
try {
for (int readNum; (readNum = sistream.read(buf)) != -1;)
fostream.write(buf, 0, readNum);
} finally {
if(sistream!=null){
sistream.close();
}
}