2011-05-28 737 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