Получаю с помощью AudioRecord от диктофона поток аудио в виде массива short array[]. Пробовал этот массив записывать в память с разрешением .pcm. Воспроизвести получилось его на компьютере с помощью программы Audacity указав свойства аудио, так как нет заголовков.
Во время его получения в реальном времени нужно его объединять с фоновой музыкой и записать в файл. (Желательно в mp3). Есть идеи как это можно сделать?
Ответ
В данный момент сделал следующим образом:
Получаю массив байтов 10 секундного фона из wav файла
Также wav файл можно просмотреть на компьютере в Hex Editor Neo, в которой можно увидеть значения в десятичной системе исчисления , а так же их значения в кодировки ASCII (Так хранится wav данные используя контейнер RIFF, правда например частота дискретизации не совпадает со значениями в аудио-плеерах, если брать примеры аудио)
Настраиваю получение аудио с диктофона с такими же настройками, как и сам аудио файл
Далее по необходимости можно прочитать информацию о wav файле согласно его структуре
После нахожу среди этого массива, именно поток с аудио данными. Для этого нам нужно найти название секции data которая занимает 4 байта, после нее идут 4 байта в десятичной системе исчисления с размером потока аудио в байтах (у меня этот размер так же не совпадает пока), после них идет массив сигнала. Поиск индекса первого значения с аудио данными:
private int readStreamIndex(byte[] backgroundBytes) {
int startIndex = 0;
for (int i = 0; i < backgroundBytes.length && i < 100; i++) {
if (backgroundBytes[i] == 100 && backgroundBytes[i + 1] == 97 && backgroundBytes[i + 2] == 116
&& backgroundBytes[i + 3] == 97) {
startIndex = i;
break;
}
}
return startIndex + 8;//4 байта - название сегмента + 4 байта размер сегмента
}
В следующем шаге складываю к байтам фона, байты аудио с микрофона полученные от AudioRecord и записываю в файл (То есть заголовок объединенного wav файла остается от фонового, но можно и свой указать)
Проигрываю wav
Вместо того что бы записывать в wav, можно с помощью MediaCodec кодировать в aac и сохранять в файл m4a c помощью MediaMuxer
Комментариев нет:
Отправить комментарий