Добавление звука с использованием RandomAccessFile

#android #audio

#Android #Аудио

Вопрос:

Я использую следующий код, чтобы добавить как можно больше файлов wav, присутствующих на sdcard, в один файл. audFullPath — это список массивов, содержащий путь к аудиофайлам. Правильно ли это. Когда я проигрываю записанную аудиоинформацию 1, после выполнения этого. Воспроизводится только первый файл. Я хочу воспроизвести все файлы. Любое предложение..

 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:

Вы не можете добавлять WAV файлы так, как вы это делаете. Это потому, что каждый из них WAV имеет особый формат:

Самый простой из возможных WAV файлов выглядит следующим образом:

 [RIFF HEADER]
...
totalFileSize    

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

[DATA CHUNK]
dataSize
<audio data>
  

Что вам нужно сделать, это:

  1. Убедитесь, что все WAV файлы совместимы: одинаковый аудиоформат, частота, биты на выборку, количество каналов и т.д.
  2. Создайте правильный RIFF заголовок с общим размером файла
  3. Создайте правильный FMT заголовок
  4. Создайте правильный DATA заголовок с общим размером аудиоданных

Этот алгоритм определенно будет работать для аудиоформатов LPCM, ULAW, ALAW. Не уверен насчет других.

Комментарии:

1. Это будет работать для PCM. Формат файла WAV описан здесь: www-mmsp.ece.mcgill.ca/documents/audioformats/wave/wave.html ; А также здесь: sonicspot.com/guide/wavefiles.html .