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.
- Volumen de secuencia en SoundPool vs volumen en AudioManager
- Reproducir sonido utilizando el ejemplo de grupo de sonidos
- La muestra 1 no está lista - Soundpool en Android 2.1
- Reproducción de sonido en los altavoces mientras reproduce música a través de auriculares
- ¿Por qué mis sonidos SoundPool no se reproducen simultáneamente en onClick ()?
- 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
- Android SoundPool cortar archivo de sonido corto
- Cómo sincronizar sonidos con SoundPool
- Saber si la carga de un sonido con SoundPool ha tenido éxito en Android 1.6 / 2.0 / 2.1
- El sonido no se reproduce en la versión de Android superior a 4,0
- Problemas de desbordamiento de tamaño de montón con clips de sonido
- Android 2.2 - La muestra 0 de SoundPool no está LISTA
- AudioFlinger no pudo crear pista. Estado: -12
- Problemas de Android Soundpool
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.
Aquí está el archivo downsampled.
- Cómo conseguir que la actividad se ejecute desde otro proceso utilizando Robotium
- Archivado tamaño de archivo APK muy grande – Xamarin.Android