问题描述
|
我使用以下代码将sdcard中存在的多个wav文件附加到单个文件。 audFullPath是一个数组列表,其中包含音频文件的路径。这是对的吗。完成此操作后,当我播放recordedaudio1时。它只播放第一个文件。我想播放所有文件。任何建议..
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));
}
解决方法
您无法以这种方式附加“ 1”个文件。那是因为每个ѭ1都有特殊格式:
最简单的
WAV
文件如下所示:
[RIFF HEADER]
...
totalFileSize
[FMT CHUNK]
...
audioFormat
frequency
bytesPerSample
numberOfChannels
...
[DATA CHUNK]
dataSize
<audio data>
您需要做的是:
确保所有“ 1”文件兼容:相同的音频格式,频率,每个样本的位数,通道数等。
创建总文件大小正确的RIFF
头
创建适当的FMT
标题
用总的音频数据大小创建正确的DATA
标题
该算法绝对适用于LPCM,ULAW,ALAW音频格式。不确定其他人。