2013-01-23 38 views
3

如何将两个音频文件合并到Android平台的单个文件中。 也就是说,如果我有两个音频文件,即A和B.请给我创建一个新的音频文件C的代码,在B后附加B. 是否有任何需要将音频文件转换为字节/短阵列? ?...在android中按顺序合并2个音频文件?

我这样做,但它只播放第一个文件。

  File firstFile=new File("/mnt/sdcard/Android/data/Dictation/Audio/Dict136.3gp"); 

      File secondFile=new File("/mnt/sdcard/Android/data/Dictation/Audio/Dict139.3gp"); 

      System.out.println("1 file:::::"+firstFile+"\n 2nd file::"+secondFile); 


      FileInputStream fistream1; 
     try { 
      fistream1 = new FileInputStream(firstFile); 
      FileInputStream fistream2 = new FileInputStream(secondFile);//second source file 



      SequenceInputStream sistream = new SequenceInputStream(fistream1, fistream2); 
      FileOutputStream fostream = new FileOutputStream("/mnt/sdcard/Android/data/Dictation/Audio/merged.3gp");//destinationfile 

      int temp; 

      while((temp = sistream.read()) != -1) 
      { 
       System.out.print((char) temp); // to print at DOS prompt 
       fostream.write(temp); // to write to file 
      } 



      filePath="/mnt/sdcard/Android/data/Dictation/Audio/merged.3gp"; 
      playAudio(filePath); 


      fostream.close(); 
      fistream1.close(); 
      fistream2.close(); 

在此先感谢。

回答

0

您可以尝试使用File Input/output Stream。要读取字节数组中的任何文件,请使用

byte[] buffer = new byte[FILE_SIZE_HERE]; 
FileInputStream fs = new FileInputStream(file); 
int bytesRead = 0; 
bytesRead = fs.read(buffer, 0, FILE_SIZE_HERE); 

这里的buffer包含您文件的字节数组。用这种方法你可以得到两个文件的字节数组。现在在第2步,当你已经采取BOT文件的字节数组,你需要两个字节数组复制到一个单一的阵列,然后你可以使用这个

FileOutputStream fout = new FileOutputStream(tempFile, true); 
fout.write(data); 
fout.close(); 

写这篇文章(第3新的数组)到一个新文件凡data是新的第三阵列合并两个数组

后,你会得到

编辑:See this how to combine two arrays

希望这会帮助你。

+1

您不能只合并音频文件并让它们正确播放。上述解决方案不起作用。 –

4

要合并的音频文件以3GP或MP4容器,你应该能够使用https://github.com/sannies/mp4parser 退房样本: https://github.com/sannies/mp4parser/blob/master/examples/src/main/java/com/googlecode/mp4parser/AppendExample.java

得到mp4parser罐子(通过maventral),并做到这一点:

 File firstFile=new File("/mnt/sdcard/Android/data/Dictation/Audio/Dict136.3gp"); 
     File secondFile=new File("/mnt/sdcard/Android/data/Dictation/Audio/Dict139.3gp"); 

     Movie movieA = MovieCreator.build(firstFile); 
     Movie movieB = MovieCreator.build(secondFile); 
     final Movie finalMovie = new Movie(); 

     List<Track> audioTracks = new ArrayList<>(); 
     for (Movie movie : new Movie[] { movieA, movieB}) { 
      for (Track track : movie.getTracks()) { 
       if (track.getHandler().equals("soun")) { 
        audioTracks.add(track); 
       } 
      } 
     } 
     finalMovie.addTrack(new AppendTrack(audioTracks.toArray(new Track[audioTracks.size()]))); 

     final Container container = new DefaultMp4Builder().build(finalMovie); 
     File mergedFile = new File("/mnt/sdcard/Android/data/Dictation/Audio/merged.3gp"); 
     final FileOutputStream fos = new FileOutputStream(mergedFile); 
     FileChannel fc = new RandomAccessFile(mergedFile, "rw").getChannel(); 
     container.writeContainer(fc); 
     fc.close(); 
+1

你发布的代码示例头几个问题,但遵循库(上面的链接)的例子,工作马上。 – Sahil

+1

谢谢,它帮助我....... – Harry