合并两个音频文件需要更多时间在Nexus上

时间:2015-03-17 07:00:01

标签: android audio merge

在我的项目中,我正致力于音频和通话录音功能。我需要合并两个音频文件。对于合并,我写了以下代码:

     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。

由于

1 个答案:

答案 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();
             }

         }