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?
- Android Streaming Wav Error de audio: Preparación de MediaPlayer: status = 0x1
- Cordova-plugin-media: Analiza ".amr" Archivo de audio en el servidor nodejs
- Cómo convertir el archivo WAV / OGG a archivo FLAC en Android?
- No se puede reproducir un archivo .wav invertido con MediaPlayer
- Creación de un archivo WAV a partir de datos PCM sin procesar utilizando el SDK de Android
- Codificar wav a AAC en Android
- Cómo codificar un WAV a un mp3 en un dispositivo Android
- Comparar voz wav en android o etiqueta de voz (comandos de voz) API
- Cómo agregar efecto de eco a archivo wav en android?
- Reproducción de archivos .wav cortos - Android
- Usar AudioTrack de Android para combinar bytes de muestras de sonido produce ruido
- Escritura de datos grabados PCM en un archivo .wav (java android)
- Cómo reproducir un archivo de onda comprimido en Flash Mobile
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.
- Mostrar contenido SCORM en Android
- Error de compilación de Maven para android Proyecto "error: paquete R no existe"