Он воспроизводит записанный звук с задержкой менее 100 мс.
у записать звук с микрофона и получить доступ к нему для возможного воспроизведения в режиме реального времени. Я не уверен, как использовать класс 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» в других местах? Кажется, этот код может либо читать слишком часто, либо слишком редко, в зависимости от того, сколько времени занимает чтение и запись.
Документ сайта также говорит, что у класса 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 в режиме реального времени. Где я могу найти конкретные примеры?