2011-12-05 10 views
12

Tengo problemas con la clase de Soundpool. Aquí va:Error de SoundPool: no hay más nombres de pistas disponibles

En mi aplicación de juego (aplicación de música por cierto) que necesito para reproducir al menos 32 sonidos cortos, al mismo tiempo, por lo que declaro mi soundpool así:

private SoundPool sp; 
sp = new SoundPool(128, AudioManager.STREAM_MUSIC, 0); 

Después de que la carga de E todos los sonidos MP3 necesarios, aproximadamente 80 sonidos de 55KB cada uno. No tengo problemas para cargar todos los sonidos, ¡pero es lento! Bueno, no es el problema. El verdadero problema es cuando juego unos 20 sonidos al mismo tiempo, hay un error en mi registro:

ERROR/AudioFlinger(59): no more track names available 
ERROR/AudioTrack(26349): AudioFlinger could not create track, status: -12 
ERROR/SoundPool(26349): Error creating AudioTrack 

Después de que cada sonido que intento jugar tiros el mismo error, y no hay sonido se pueden reproducir. Ni siquiera sonidos de otra Activity/soundpool. ¡No tengo ni idea de lo que está pasando ni cómo solucionarlo! ¿Debo cambiar el formato de los archivos de sonido? ¿Debería liberar memoria o algo después de reproducir un sonido?

(estoy probando en un Samsung Galaxy S I9000, 2.3.3 sistema OS. La aplicación es 2,1)

+0

Tal vez necesita implementar SoundPool.OnLoadCompleteListener? – Codeman

+0

para llamar a la versión() para cada uno de los AudioTracks? – Codeman

+0

Asegúrate de que el modo de bucle no esté habilitado, que ninguna pista esté configurada en pausa y que cada mp3 sea realmente tan corto como piensas (sin silencio al final). Como hay una cantidad limitada de pistas de audio disponibles, debe mantener baja la cantidad de pistas de audio en ejecución. Tal vez hay menos de 32 pistas disponibles, por lo que no puede reproducir tantos sonidos al mismo tiempo. Además, algunas implementaciones son defectuosas, y pueden colgarse en algunas pistas (tal vez dependerán de un archivo mp3 incorrecto o algo así), por lo que las pistas disponibles se agotan bastante rápido. Si la aplicación falla, a veces las pistas no se liberan, por lo que no hay sonido. – dronus

Respuesta

1

Un par de pensamientos aquí. Uno: el primer parámetro para el constructor SoundPool no es el número de sonidos que desea cargar en él, es la cantidad máxima de secuencias simultáneas que estará reproduciendo. En segundo lugar, SoundPool tiene memoria limitada para sonidos, alrededor de 1MB. Así que no me sorprendería en absoluto si alcanzas algún límite no documentado en la cantidad de pistas que puedes cargar a la vez. Tenga en cuenta que 80 sonidos por 55k por sonido es definitivamente más de 1MB. Y ese límite es para después de que los mp3 se hayan descomprimido en datos de audio dentro de SoundPool.

4

ver this (in android group)

Para el audio, hay un límite estricto de 32 objetos Audiotrack activo por dispositivo (no por aplicación: tiene que compartir los 32 con resto del sistema),

Cuestiones relacionadas