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