3

我在安卓工作。我想合并两个波形文件并想创建第三个文件。为此,我创建了两个输入流,然后尝试将这些输入流写入一个输出流文件。

这是我的代码:-

 File file = new File("/sdcard/z.wav");
        File file1 = new File("/sdcard/zz.wav");
        InputStream is = new FileInputStream(file);
        InputStream is1 = new FileInputStream(file1);

        // Get the size of the file
        long length = file.length();
        long length1 = file1.length();


        // Create the byte array to hold the data
        byte[] bytes = new byte[(int)length];
        byte[] bytes1 = new byte[(int)length1];

        // Read in the bytes
        int offset = 0;
        int numRead = 0;
        while (offset < (int)length &&( numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) {
            offset += numRead;
        }

        int offset1 = 0;
        int numRead1 = 0;
        while (offset1 < (int)length1 &&( numRead1=is1.read(bytes1, offset1, bytes1.length-offset1)) >= 0) {
            offset1 += numRead1;
        }





        FileOutputStream fos=new FileOutputStream("sdcard/guruu.wav");
        Log.v("Trying Activity","before first write");
        fos.write(bytes);

        fos.write(bytes1,0,bytes1.length);
        fos.write(bytes);
        fos.close();

        is.close();
        is1.close();

当我播放输出文件 guruu.wav 时,这只是播放file1的文件,而不是播放 file2 的内容。请告诉我我犯了什么错误。有没有其他方法可以做到这一点?

我在这方面很新,所以请不要投反对票。

先感谢您。

4

1 回答 1

0

您没有合并数据,您只是将其连接起来。

因此,您最终会得到一个文件,其中包含:

  • 文件 1 的 WAV 文件头
  • 文件 1 的音频数据
  • 文件 2 的 WAV 文件头
  • 文件 2 的音频数据

可以理解的是,当有人读回这个文件来播放它时,他们认为它是

  • WAV 文件头
  • 音频数据
  • 文件末尾的一些垃圾数据,他们甚至没有考虑过。

要真正合并这些文件,您需要正确考虑WAV 文件的内部结构

于 2014-03-31T10:50:00.760 回答