SoundPool "AudioFlinger no pudo crear pista, estado: -12"

Tengo una aplicación de Android con un solo botón. Cuando se hace clic en el botón, la aplicación comienza a reproducir (bucles) el sonido cargado con SoundPool. Cuando se hace clic de nuevo en el botón, el sonido se detiene y, a continuación, se inicia de nuevo.

Pero el problema es que el sonido solo se reproduce cada vez.

  • Haga clic en 1ª vez -> sonido empieza a reproducirse
  • Haga clic en 2ª vez -> el sonido se detiene pero no se vuelve a iniciar
  • Haga clic en 3ª vez -> el sonido comienza a reproducirse
  • Haga clic en la 4ª vez -> el sonido se detiene pero no empieza a reproducirse
  • y así…

Cuando el sonido no se reproduce, este error aparece en el logcat:

E/AudioTrack: AudioFlinger could not create track, status: -12 E/SoundPool: Error creating AudioTrack 

Cuando elimino el bucle (cambio -1 a 0), todo funciona completamente a la derecha!

El sonido que estoy tocando es un archivo MP3, tamaño 71.6 KiB.

He probado esto en Sony Xperia U, con Android 4.1.2 (no funciona). Pero en mi Huawei Honor 6 (Android 6.0) todo funciona, incluyendo bucle!

¿Qué estoy haciendo mal?


Aquí está mi código:

 import android.media.AudioManager; import android.media.SoundPool; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; public class MainActivity extends AppCompatActivity { private int lastStreamId = 0; private int soundID; private SoundPool soundPool; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); soundPool = new SoundPool(1, AudioManager.STREAM_MUSIC, 0); soundID = soundPool.load(this, R.raw.sound01, 1); Button button = (Button) findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { soundPool.stop(lastStreamId); lastStreamId = soundPool.play(soundID, 1, 1, 1, -1, 1); } }); } } 

EDITAR:

No se me permite subir el sonido original aquí, pero aquí hay otro sonido que hace lo mismo. Excepto que ahora el sonido sólo se reproduce en el primer clic ; Todos los siguientes clics simplemente lo hacen silencioso y escupe el error anterior.

El sonido está aquí: sound01.mp3

Como puede ver aquí , el código de error 12 significa Out of memory insuficiente en el entorno Linux. Al parecer, son algunas cuestiones relativas a la asignación de memoria en Jelly Bean (supongo que para pre-lollipop) dispositivos.

He reducido el tamaño de su archivo original de 177808kbps a 32000kbps, y comenzó a funcionar como se espera en los dispositivos pre-lollipop.

Así pues, usted tiene que downsample su archivo audio para los dispositivos del pre-lollipop. Mejor tener una raw-v21 para archivos de audio originales, y poner downsampled en raw . Por lo tanto, los dispositivos que comienzan a partir de la API 21 utilizarán la versión original.

Introduzca aquí la descripción de la imagen

Aquí está el archivo downsampled.

  • Android L SoundPool.load () regresión
  • Excepción no captada lanzada por el finalizador java.lang.IllegalStateException: Binder se ha finalizado
  • La muestra de Soundpool no está lista
  • Android es la forma más rápida de cargar y reproducir sonido en la aplicación
  • Android SoundPool.play () a veces se retrasa
  • Android: grabación de la salida SoundPool
  • ¿Cómo detener todos los sonidos en SoundPool?
  • ¿Cuál es la mejor manera de obtener una duración de archivo de audio en Android?
  • Jugar dos sonidos Simutaneosly
  • Android SoundPool: se notifica cuando final de jugado
  • Sincronización de sonidos Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.