Я хочу записать звук с микрофона и получить доступ к нему для возможного воспроизведения почти в режиме реального времени. Я не уверен, как использовать класс Android AudioRecord для записи некоторого микрофонного звука и быстрого доступа к нему.
Для класса AudioRecord на официальном сайте говорится: "приложение опроса объекта AudioRecord во времени", а "размер заполняемого буфера определяет длину записи перед превышением непрочитанных данных". Позже он предположил, что при частом опросе следует использовать больший буфер. Они никогда не показывают пример кода.
Один пример, который я видел в книге, использует класс AudioRecord для непрерывного чтения буфера, недавно заполненного живым микрофонным звуком, а затем приложение записывает эти данные в файл SD. Псевдокод выглядит примерно так:
set up AudioRecord object with buffer size and recording format info
set up a file and an output stream
myAudioRecord.startRecording();
while(isRecording)
{
// myBuffer is being filled with fresh audio
read audio data into myBuffer
send contents of myBuffer to SD file
}
myAudioRecord.stop();
Как этот код синхронизирует его чтение со скоростью записи, неясно - является ли логическая "isRecording" упорядоченной и упорядоченной в другом месте? Кажется, этот код может читаться слишком часто или слишком редко, в зависимости от того, сколько времени занимает чтение и письмо.
Сайт doc также говорит, что класс AudioRecord имеет вложенный класс с именем OnRecordPositionUpdateListener, который определяется как интерфейс. Информация подсказывает, что каким-то образом вы указываете период, в течение которого вы хотите получать уведомление о ходе записи, и имя вашего обработчика событий, и вызов автоматически выполняется для вашего обработчика событий с указанной частотой. Я думаю, что структура, в псевдокоде будет что-то вроде -
set target of period update message = myListener
set period to be about every 250 ms
other code
myListener()
{
if(record button was recently tapped)
handle message that another 250 ms of fresh audio is available
ie, read it and send it somewhere
)
Мне нужно найти определенный код, который позволяет мне захватывать и обрабатывать микрофонный звук с задержкой менее 500 мс. Android предлагает еще один класс под названием MediaRecorder, но он не поддерживает потоковое вещание, и я могу захотеть транслировать живое микрофонное аудио через сеть Wi-Fi почти в режиме реального времени. Где я могу найти некоторые конкретные примеры?