2011-05-30 98 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