Los archivos OGG no se enlazarán correctamente usando Android usando MediaPlayer

Cuando intento enlazar archivos MP3 hay una diferencia muy pequeña en mis dispositivos KitKat y Lollipop, pero en un viejo teléfono Gingerbread, la brecha entre los bucles es más pronunciada. Es suficiente que necesito hacer algo al respecto así que …

Después de mucha investigación, aprendí que los archivos MP3 ponen un poco de "relleno" al principio del archivo, por lo tanto, al realizar un bucle, no da un "bucle limpio" y este efecto puede ser más pronunciado en los más antiguos / más lentos Teléfonos (al parecer).

Así pues, el consejo que leí era cambiar a usar archivos de OGG Vorbis. Estos no tienen ningún espacio en blanco / relleno y 'loop perfectamente'.

Sin embargo, después de intentar varias veces, en realidad estoy obteniendo resultados peores con archivos OGG que con MP3 – pero el problema es lo contrario, es decir, cuando el bucle se supone que volver al inicio del archivo OGG, en realidad parece Para empezar de nuevo, pero de unos 2 o 3 segundos en él (es decir, no hay "hueco", simplemente no lo hace correctamente).

Debo señalar que los archivos OGG mismos parecen estar bien, se encajan perfectamente en Audacity.

Estoy trabajando con 2 objetos MediaPlayer – uno para una introducción y otro para el bucle principal, la introducción es de unos 30 segundos de longitud y el bucle principal es de unos 3 minutos de duración.

También estoy (para JellyBean y dispositivos superiores), utilizando setNextMediaPlayer para la transición de la intro al bucle principal – esto funciona bien (o al menos lo hace en los dos dispositivos en los que he probado) – y para pre JellyBean Dispositivos Estoy empezando mi bucle principal en el método de devolución de llamada onCompletementListener – sólo tengo un dispositivo pre-JB, pero de nuevo, la transición parece estar bien).

Tenga en cuenta que si ayuda, pero aquí hay algún código, aunque los problemas parecen estar con la forma en que el MediaPlayer Android maneja archivos OGG Vorbis.

He estado tratando de conseguir este bucle funcionando correctamente durante casi una semana, por lo que la esperanza de alguien se ha encontrado con esto antes y puede arrojar algo de luz sobre él.

public void setDataSource() { try { loopPlayer.reset(); loopPlayer.setDataSource(myContext, Uri.parse("android.resource://com.me.myapp/" + R.raw.loop)); loopPlayer.prepare(); loopPlayer.setLooping(true); introPlayer.reset(); introPlayer.setDataSource(myContext, Uri.parse("android.resource://com.me.myapp/" + R.raw.intro)); introPlayer.prepare(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { introPlayer.setNextMediaPlayer(loopPlayer); loopPlayer.setLooping(true); } introPlayer.setOnCompletionListener(this); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public void onCompletion(MediaPlayer mp){ //If OS < Jelly Bean, then start loop if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN){ loopPlayer.start(); } } 

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.