#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>
Что вам нужно сделать, это:
- Убедитесь, что все
WAV
файлы совместимы: одинаковый аудиоформат, частота, биты на выборку, количество каналов и т.д. - Создайте правильный
RIFF
заголовок с общим размером файла - Создайте правильный
FMT
заголовок - Создайте правильный
DATA
заголовок с общим размером аудиоданных
Этот алгоритм определенно будет работать для аудиоформатов LPCM, ULAW, ALAW. Не уверен насчет других.
Комментарии:
1. Это будет работать для PCM. Формат файла WAV описан здесь: www-mmsp.ece.mcgill.ca/documents/audioformats/wave/wave.html ; А также здесь: sonicspot.com/guide/wavefiles.html .