Clase Android AudioRecord: procesa el audio del micrófono en vivo rápidamente, configura la función de devolución de llamada

Quiero grabar audio del micrófono y acceder a él para una posible reproducción casi en tiempo real. No estoy seguro de cómo usar la clase Android AudioRecord para grabar audio de micrófono y acceder rápidamente a él.

Para la clase AudioRecord, el sitio oficial dice 'la aplicación sondea el objeto AudioRecord a tiempo' y 'el tamaño del búfer que se llena determina la duración de la grabación antes de sobrepasar los datos no leídos'. Más tarde, se sugiere que se use un búfer más grande cuando se realiza la encuesta con menos frecuencia. En realidad, nunca muestran un ejemplo en el código.

Un ejemplo que he visto en un libro usa la clase AudioRecord para leer continuamente un búfer recién poblado con audio de micrófono en vivo, y luego la aplicación escribe estos datos en un archivo SD. El pseudocódigo se parece a:

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();

La forma en que este código sincroniza su lectura con la velocidad de grabación no está clara: ¿la secuencia "isRecording" booleana se activa y desactiva correctamente en otro lugar? Parece que este código podría leer con demasiada frecuencia o con poca frecuencia, dependiendo de cuánto tiempo lleve la lectura y la escritura.

El documento del sitio también dice que la clase AudioRecord tiene una clase anidada llamada OnRecordPositionUpdateListener que se define como una interfaz. La información sugiere que, de alguna manera, usted especifica el período que desea para recibir notificaciones sobre el progreso de la grabación y el nombre de su controlador de eventos, y se realiza una llamada automáticamente a su controlador de eventos con la frecuencia especificada. Creo que la estructura, en pseudocódigo, sería algo así como:

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
)

Necesito encontrar un código específico que me permita capturar y procesar el audio del micrófono con un retraso de menos de aproximadamente 500 ms. Android ofrece otra clase llamada MediaRecorder, pero no admite transmisión, y es posible que desee transmitir audio de micrófono en vivo a través de una red Wi-Fi en tiempo casi real. ¿Dónde puedo encontrar algunos ejemplos específicos?

Respuestas a la pregunta(4)

Su respuesta a la pregunta