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.
- Control de enfoque en un ListView
- Reproducción de audio hacia atrás
- Android reproducir problema de vídeo: Device Specific
- Cambiar los atributos de la vista en la selección de elementos de la lista
- Android app admob haciendo clic en sus propios anuncios violaciones descargadas de playstore
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!
- Ejemplo de streaming de vídeo de Android
- Escuchar sonido en el botón de clic en android
- Cómo reproducir video de YouTube en mi aplicación de Android?
- Android no reproduce vídeo .mp4
- Reproducción de vídeo en pantalla completa
- El archivo Dex superó los 64 KB después de agregar Google Play Services.
- MediaPlayer tartamudea al inicio de la reproducción de mp3
- cómo reproducir un video usando el videoView y un inputStream
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.
- SuperpoweredRecorder funciona bien para grabar pistas;
- 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