Android Superpowered SDK Grabación y reproducción simultáneamente

Mi objetivo es reproducir archivos locales mientras se graba la entrada de micrófono del dispositivo con baja latencia. He llegado a la biblioteca de Superpowered, porque de la documentación que proporciona la característica de baja latencia. He creado el reproductor utilizando SuperpoweredAdvancedAudioPlayer y SuperpoweredAndroidAudioIO y se reproduce bien.

SuperpoweredAndroidAudioIO tiene el constructor con los parámetros boolean enableInput, boolean enableOutput . Actualmente estoy usando enableInput == false y enableOutput == true. Cuando pongo estos parámetros en verdad – sin efecto.

Me pregunto si es posible grabar archivos y reproducir otros archivos simultáneamente?

También hay clase de SuperpoweredRecorder en la biblioteca pero no dice para la escritura directa al disco. Y la necesidad de utilizar createWAV, fwrite, closeWAV métodos. He intentado el registrador del instrumento por separado pero la calidad no es buena (es dos-tres veces más rápidamente que la grabación verdadera + el sonido se distorsiona). Aquí está el pedazo más simple de código para la grabación que utilicé:

void SuperpoweredFileRecorder::start(const char *destinationPath) { file = createWAV(destinationPath, sampleRate, 2); audioIO = new SuperpoweredAndroidAudioIO(sampleRate, bufferSize, true, false, audioProcessing, NULL, bufferSize); // Start audio input/output. } void SuperpoweredFileRecorder::stop() { closeWAV(file); audioIO->stop(); } static bool audioProcessing(void *clientdata, short int *audioInputOutput, int numberOfSamples, int samplerate) { fwrite(audioInputOutput, sizeof(short int), numberOfSamples, file); return false; } 

Probablemente no puedo usar Superpowered para ese propósito y necesito hacer la grabación directamente con OpenSL ES.

¡Gracias por adelantado!

Puede hacer esto con una instancia de SuperpoweredAndroidAudioIO con enableInput y enableOutput establecido en true.

La devolución de llamada de procesamiento de audio (audioProcessing () en su caso) recibe audio (micrófono) en el parámetro audioInputOutput. Simplemente pase eso a su SuperpoweredRecorder, y lo escribirá en disco.

Después de eso, realice el procesamiento SuperpoweredAdvancedAudioPlayer y convierta el resultado en audioInputOutput. Eso irá a la salida de audio.

Así que es como, en pseudo-código:

 audioProcessing(audioInputOutput) { recorder->process(audioInputOutput) player->process(some_buffer) float_to_short_int(some_buffer, audioInputOutput) } 

Nunca efectúe ninguna escritura en la devolución de llamada de procesamiento de audio, ya que debe completarse en un tiempo muy corto, y las operaciones de disco pueden ser demasiado lentas.

Después de los experimentos encontré la solución.

  1. SuperpoweredRecorder funciona bien para grabar pistas;
  2. He creado para separar fuentes de SuperpoweredAndroidAudioIO – una para la reproducción y otra para la grabadora. Después de una cierta manipulación de la sincronización trabaja bien (reduje la latencia al nivel muy bajo, así que satisface mis necesidades).

Publico un fragmento de código con la idea que implemente:

https://bitbucket.org/snippets/kasurd/Mynnp/nativesuperpoweredrecorder-with

Espero que ayude a alguien!

Para mí esto funciona cuando doblo el número de Amostras

 fwrite(audioInputOutput, sizeof(short int), numberOfSamples * 2, file); 

Esto conducirá a una salida estéreo clara

  • Android, Java - Renderización de un vídeo utilizando marcos de mapa de bits para invertir un vídeo (Xuggler)
  • Directorio para almacenar archivos de audio en Android
  • Android 2.1 Detectar audio Bluetooth conectar / desconectar
  • Cómo reproducir video de YouTube en mi aplicación de Android?
  • Gesto del usuario necesario para iniciar la reproducción en el reproductor HTML5 de Android
  • RTSP Stream en VideoView en Aplicación para Android
  • Cómo reproducir un archivo de vídeo en android?
  • Cambio de velocidad de reproducción / tempo de Android
  • Android: usar el reproductor de video por defecto
  • Cómo simular los botones de control de medios de hardware en un emulador de Android
  • La animación de un elemento de vista de lista tiene efecto en varias filas
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.