2011-05-28 731 views
3

我使用AudioRecorder录制了音频。我需要将录制的文件合并到一个文件中。任何建议。合并pcm音频文件

getAudioPath() - audiofiles的路径。 getCombineFile()---组合文件的路径。我的问题是第一个文件独自玩耍,而不是整个文件在该目录中

public void readAudioAsStream() 
      { 
       getAudioPath(); 
       File f=null; 
       FileInputStream ins = null; 
       ReadSDDatas rds=new ReadSDDatas(); 
       try 
       { 
        String comfile=rds.getCombineFile(); 
        //FileOutputStream fos=new FileOutputStream(comfile); 
        Log.d("combined file",comfile); 
        File file=new File(comfile); 
        RandomAccessFile raf = new RandomAccessFile(file, "rw"); 
        Log.d("path size",Integer.toString(audFullPath.size())); 
        for(int i=0;i<audFullPath.size();i++) 
        { 
         String filepath=audFullPath.get(i); 
         Log.d("Filepath",filepath); 
          f=new File(audFullPath.get(i));             
          fileContent = new byte[read]; 
          ins=new FileInputStream(audFullPath.get(i)); 
          int numofbytes=ins.read(fileContent); 
          System.out.println("Number Of Bytes Read===========>>>"+numofbytes); 
          raf.seek(file.length()); 
          raf.write(fileContent); 


        } 



       } 
       catch (FileNotFoundException e1) 
       { 
        // TODO Auto-generated catch block 
        e1.printStackTrace(); 
       } 
       catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 

       /*String path=audFullPath.get(val); 
       playAudio(path);*/ 
       playAudio(); 
       /* 
       for(int i=0;i<audFullPath.size();i++) 
       { 
        Log.d("fullpathsize",Integer.toString(audFullPath.size())); 
        playAudio(audFullPath.get(i)); 
       }*/ 

      } 
+0

通过合并你是不是指在一个文件中按顺序播放一个文件,还是同时播放? – Geobits 2011-05-28 11:04:42

+0

我想将它们作为单个文件播放,无需暂停 – Manikandan 2011-05-28 11:19:31

回答

0

如果您使用AudioRecord.read(),我假设你有一个短或字节数组的PCM数据。如果是这样的话,你所需要做的就是创建一个与两个原始文件一样大的新数组,然后一个接一个地复制数据。像这样:

short[] newData = new short[dataOne.length + dataTwo.length]; 
for(int i=0;i<dataOne.length;i++) 
    newData[i] = dataOne[i]; 
for(int i=0;i<dataTwo.length;i++) 
    newData[i+dataOne.length] = dataTwo[i]; 

然后,你有一个阵列与所有的PCM数据,你可以用你会做什么。

+0

感谢Geobits,但我可以录制尽可能多的文件。那么我应该在短[]的长度中给出什么。 – Manikandan 2011-05-30 08:30:28

+0

输出短[]长度将是所有输入长度加在一起的总和 – Geobits 2011-05-30 08:54:33

+0

地理位置,我已经添加了用于将文件合并到单个文件中的代码。 – Manikandan 2011-05-30 11:05:32