MediaPlayer onCompletion no se llama con precisión

En mi aplicación he creado un reproductor de audio (sólo archivos WAV) con MediaPlayer API. Pero el reproductor no devuelve la llamada a OnCompletion Listener cada vez. A veces da callback pero no cada vez. Estoy haciendo un poco de proceso audio en el archivo del wav, como la inserción y sobrescribir.

¿Es porque falta en el encabezado de audio? ¿Por qué no devuelve la llamada cuando se completa la reproducción?

Asegúrese de que los encabezados del archivo están configurados correctamente. Si somethings en el encabezado falta el callback de callback al onCompletion puede no ocurrir.

Si mediaplayer está jugando un archivo .wav , la búsqueda puede ocurrir correctamente, pero una sacudida estará allí. Por lo tanto, cuando se completa la reproducción habrá un differecnce de 0-1000 ms entre la duración total del archivo y onCompletion respectivamente. Así que si tal situación viene usted debe adivinar que como onColmpletion y hacer lo que quería. Eso es un poco complicado para obtener el onCompletion .

Me enfrenté al mismo problema mientras jugaba un archivo .wav con el reproductor de medios. Esta no es una buena manera de resolver este problema, pero me enfrenté al mismo problema como este cuando estaba teniendo la misma situación. Espero que esto te ayude también en algunos aspectos.

Estás usando el método correcto pero has pasado cualquier código en el "/ / hacer algunas tareas aquí cuando se completa la reproducción" AREA .

Si no, entonces la devolución de llamada no tendrá ningún sentido.

 mMediaPlayer.setOnCompletionListener(new OnCompletionListener() { public void onCompletion(MediaPlayer mp) { Toast.makeText(getApplicationContext(),"Playback Completes", Toast.LENGTH_SHORT).show(); } }); 

Este método hará estallar un Toast al completar la reproducción.

Parece que tienes que llamar a setOnCompletionListener DESPUÉS de llamar a start (). Echa un vistazo aquí: https://stackoverflow.com/a/19555480/1860130

Trabajó para mí.

Para obtener la función onCompletion () llamada debe desactivar el bucle con una llamada mediaPlayer.setLooping (false);

Asegúrese de que MediaPlayer no es una variable local (temporal). Dado que la variable local será recogida por GC. En ese caso, el onCompletion no tendrá ninguna posibilidad de ser invocado.

Trate de usar un método de sueño una vez que se completa la grabación. También utiliza; .prepare () antes de que se produzca el lugar, para evitar accidentes.

  • Usar AudioTrack de Android para combinar bytes de muestras de sonido produce ruido
  • Comparar voz wav en android o etiqueta de voz (comandos de voz) API
  • Cómo codificar un WAV a un mp3 en un dispositivo Android
  • Escritura de datos grabados PCM en un archivo .wav (java android)
  • Cordova-plugin-media: Analiza ".amr" Archivo de audio en el servidor nodejs
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.