Страницы

Поиск по вопросам

среда, 11 декабря 2019 г.

Как объединить два потока аудио в реальном времени?

#android #аудио


Получаю с помощью AudioRecord от диктофона поток аудио в виде массива short array[].
Пробовал этот массив записывать в память с разрешением .pcm. Воспроизвести получилось
его на компьютере с помощью программы Audacity указав свойства аудио, так как нет заголовков. 

Во время его получения в реальном времени нужно его объединять с фоновой музыкой
и записать в файл. (Желательно в mp3). Есть идеи как это можно сделать?
    


Ответы

Ответ 1



В данный момент сделал следующим образом: Получаю массив байтов 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

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

Отправить комментарий