2011-05-30 97 views
1

我使用以下代碼將SD卡中存在的許多wav文件附加到單個文件中。 audFullPath是一個包含音頻文件路徑的數組列表。這是對的嗎。當我播放錄製的音頻1時,在這之後。它只播放第一個文件。我想播放所有的文件。任何建議..使用RandomAccessFile附加音頻

File file = new File(「/ sdcard/AudioRecorder/recordedaudio1.wav」);

RandomAccessFile raf = new RandomAccessFile(file,「rw」);

  for(int i=0;i<audFullPath.size();i++) 
        { 
      f=new File(audFullPath.get(i));  

fileContent = new byte[(int)f.length()];           System.out.println("Filecontent"+fileContent); 

     raf.seek(raf.length()); 

     raf.writeBytes(audFullPath.get(i)); 

        } 

回答

4

您不能追加WAV文件你的方式。這是因爲每個WAV有特殊格式:

最簡單的WAV文件看起來像這樣:

[RIFF HEADER] 
... 
totalFileSize  

[FMT CHUNK] 
... 
audioFormat 
frequency 
bytesPerSample 
numberOfChannels 
... 

[DATA CHUNK] 
dataSize 
<audio data> 

你需要做的是:

  1. 確保所有WAV文件的兼容:相同的AudioFormat,頻率,每個樣品,通道數等
  2. 比特創建適當RIFF頭與總文件大小
  3. 創建適當FMT
  4. 創建適當DATA頭總音頻數據大小

這算法肯定會爲LPCM,ULAW,ALAW音頻格式工作。不確定其他人。

+0

謝謝,ü可以建議我任何有用的鏈接... – Manikandan 2011-05-31 08:33:43

+0

請問我的方法適用於PCM文件... – Manikandan 2011-05-31 08:45:09

+0

它將爲PCM工作。 WAV文件格式在這裏描述:http://www-mmsp.ece.mcgill.ca/documents/audioformats/wave/wave.html;還有:http://www.sonicspot.com/guide/wavefiles.html。 – inazaruk 2011-05-31 08:47:11