Android L SoundPool.load () regresión
En Android L, la última versión preliminar del desarrollador (Nexus 5), parece haber una regresión en el método SoundPool.load () que tarda más de 5 segundos en cargar una muestra (<100kb), donde se cargaron muestras en sistemas pre-L Instantáneamente con el mismo código.
He intentado OGG o MP3, ambos con los mismos resultados. Probado diferentes tamaños pero todos bajo 100kb. Parece que 40kb o 80kb no hace ninguna diferencia, también lo hace OGG o MP3. La carga es siempre alrededor de 5s retraso.
- Seamless Looping con SoundPool en Android?
- Problemas de desbordamiento de tamaño de montón con clips de sonido
- Sincronización de sonidos Android
- La piscina de sonido no termina jugando el archivo completo
- ¿Por qué varias llamadas de Android SoundPool.unload devuelven true / false dependiendo del pedido?
Esto parece ser otra regresión en SoundPool después de que el bucle se haya roto en 4.3.
El problema es fácilmente reproducible con:
pool = new SoundPool(6, AudioManager.STREAM_MUSIC, 0); // use a listener to start playback after load pool.setOnLoadCompleteListener(listener); // R.raw.sound1 is either an OGG or MP3 sample under 100kb od size int id = pool.load(context, R.raw.sound1, 1); // onLoadComplete() method of the listener is called several seconds after the call to laod()
Lo mismo ocurre con la construcción del SoundPool utilizando la API 21 de Builders introducida de la siguiente manera:
AudioAttributes attr = new AudioAttributes.Builder() .setUsage(AudioAttributes.USAGE_MEDIA) .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) .build(); pool = new SoundPool.Builder().setAudioAttributes(attr).setMaxStreams(6).build();
¿Hay alguien más experimentando esto? ¿Alguien encontró una solución?
¡Muchas gracias!
- Reproducción de sonido en los altavoces mientras reproduce música a través de auriculares
- Error SoundPool: no hay más nombres de pista disponibles
- Android es la forma más rápida de cargar y reproducir sonido en la aplicación
- ¿Cómo detener todos los sonidos en SoundPool?
- Excepción no captada lanzada por el finalizador java.lang.IllegalStateException: Binder se ha finalizado
- Grabar / capturar la reproducción interna de sonido de la aplicación de Android y exportar mp3?
- MediaPlayer de Android setNextMediaPlayer () alternativa
- AudioFlinger no pudo crear pista. Estado: -12
Sólo para que ustedes sepan, este es un error conocido:
- https://code.google.com/p/android-developer-preview/issues/detail?id=1812
- https://code.google.com/p/android/issues/detail?id=81187
He intentado multi-threading … Funciona bien en un sentido que no bloquea la aplicación! Pero necesitas saber que no puedes llamar al método Soundpool.load antes de cargar todos tus sonidos. Incluso si llama a carga en un sonido que ya se ha cargado, hace que la aplicación se congele. Supongo que la clase SoundPool tiene algún tipo de sincronización interna de algún tipo. De todos modos, puede hacer su tipo de aplicación de trabajo utilizando este método. Esta es una especie de fragmento que puede ayudar:
private class loadSFXasync extends AsyncTask<String, Integer, Long> { protected Long doInBackground(String... str) { int count = str.length(); long totalSize = 0; for (int i = 0; i < count; i++) { mSoundPool.load(str,1); publishProgress((int) ((i / (float) count) * 100)); } return totalSize; } protected void onProgressUpdate(Integer... progress) { setProgressPercent(progress[0]); } protected void onPostExecute(Long result) { mAllSoundsAreLoaded=true; } }
Y en su código:
playSound(String str){ if (!mAllSoundsAreLoaded) return; // otherwise: do mSoundPool.load(....) }