38 votes

AudioFlinger n'a pas pu créer de la piste. statut: -12

Je suis de programmation pour android 2.2 et suis en train de l'aide de l' SoundPool la classe pour jouer plusieurs sons simultanément, mais à ce que se sentir comme aléatoire fois le son va s'arrêter de sortir des haut-parleurs.

pour chaque son qui aurait été joué à ce qui est imprimé dans le logcat:

AudioFlinger could not create track. status: -12 
Error creating AudioTrack
Audio track delete

Aucune exception n'est levée et le programme continue de s'exécuter sans aucun changement, sauf pour le manque de volume. J'ai eu vraiment du mal à traquer quelles conditions la cause de l'erreur ou de le recréer après qu'il se passe. Je ne trouve pas l'erreur dans la documentation, n'importe où et je suis assez bien à perte.

Toute aide serait grandement appréciée!

Edit: j'ai oublié de mentionner que je suis le chargement des fichiers mp3, pas ogg.

22voto

john.k.doe Points 5481

j'avais presque exactement le même problème avec certains sons que j'essayais de charger et jouer récemment.

j'ai même coupé le chargement d'un seul mp3 qui a été la cause de cette erreur.

une chose que j'ai noté: quand j'ai chargé avec une boucle de -1, il ne pourrait pas avec le statut de "12" erreur, mais quand je l'ai chargé de boucle 0 fois, il allait réussir. même si vous tentez de charger 1 fois échoué.

la solution finale a été d'ouvrir les mp3 dans un éditeur audio et de le modifier légèrement moindre qualité, de sorte que le fichier est plus petit, et ne semble pas prendre autant de ressources dans le système.

enfin, il y a cette discussion qui encourage l'exécution d'un communiqué de presse sur les objets que vous utilisez, car il n'y a en effet une dure limite sur les ressources qui peuvent être utilisées, et c'est à l'échelle du système, de sorte que si vous utilisez plusieurs de ces ressources, d'autres applications ne seront pas en mesure de les utiliser.

https://groups.google.com/forum/#!topic/android plate-forme/tyITQ09vV3s/discussion%5B1-25%5D

Pour l'audio, il y a une limite de 32 active AudioTrack objets par appareil (et non par l'application: vous devez partager ces 32 avec le reste du système), et AudioTrack est utilisé en interne sous SoundPool, ToneGenerator, lecteur multimédia, audio natif basé sur OpenSL ES, etc. Mais la réelle AudioTrack limite est < 32; il dépend plus de facteurs mous comme la mémoire, la charge CPU, etc. Notez également que le limiteur dans le Android mixage audio ne dispose pas actuellement de compression de la gamme dynamique, il est ainsi possible de clip si vous avez un grand nombre de sons et ils sont tous fort.

Pour les lecteurs vidéo, la limite est beaucoup plus faible en raison de l'intense charge cette vidéo met sur le périphérique.

Je vais utiliser cela comme une occasion de rappeler aux développeurs de médias: veuillez n'oubliez pas d'appeler release() pour les objets multimédia lorsque votre application est en pause. Cela libère les ressources sous-jacentes que les autres applications ont besoin. Ne comptez pas sur les médias objets nettoyé à finaliser par le garbage collector, comme cela a imprévisibles calendrier.

2voto

user2016617 Points 11

J'ai eu un problème similaire où la musique tracker dans mon jeu Android serait abandonner les notes et j'ai eu le Audioflinger erreur (bien que mon statut était -22). Je l'ai eu à travailler, cependant cela peut aider certaines personnes.

Le problème est survenu quand un seul échantillon a été diffusé plusieurs fois simultanément. Donc, dans mon cas, c'était un seul échantillon joué sur deux ou plusieurs pistes. Cela semblait à l'occasion, de blocage ou de quelque chose et l'un des deux notes serait tombé. La solution est d'avoir deux copies de l'échantillon (les deux fichiers ogg - identiques, mais à la fois à l'actif). Ensuite, sur chaque piste, même si je jouais le même échantillon, il a été à venir à partir d'un autre fichier. Cela a totalement résolu le problème pour moi.

Je ne sais pas pourquoi ça fonctionne comme je cache les échantillons dans la mémoire, mais même le chargement du même fichier dans les deux sons différents n'ont pas le fixer. Seulement lorsque les échantillons sont de deux fichiers différents ne les erreurs disparaissent.

Je suis sûr que cela ne va pas aider tout le monde et ce n'est pas la plus jolie fixer, mais il pourrait aider quelqu'un.

2voto

rotterick Points 11

jean.k.doe est droit. Vous devez réduire la taille de votre fichier mp3. Vous devez garder la taille inférieure à 100 ko par fichier. J'ai dû réduire mon 200ko fichier à 72kb à l'aide d'une constante bit rate(CBR) de 32 kbps au lieu de l'habituel 128kbps. Ce qui a fonctionné pour moi!

1voto

Cléssio Mendes Points 79

Essayez

 final ToneGenerator tg = new ToneGenerator(AudioManager.STREAM_NOTIFICATION, 50);
 tg.startTone(ToneGenerator.TONE_PROP_BEEP, 200);
 tg.release();

Libérant devrait garder vos ressources.

0voto

Dominic Cerisano Points 124

Un seul soundPool dispose d'une mémoire interne de limitation de 1 (un) Mo. Vous pourriez être frappé dans cette si votre son est de très haute qualité. Si vous avez beaucoup de sons et de frapper de cette limite, il suffit de créer plus soundpools, et de distribuer vos sons à travers eux.

Vous pouvez même ne pas être en mesure d'atteindre le hard track limite si vous êtes à court de mémoire avant d'y arriver.

Cette erreur ne s'affiche seulement lorsque le cours d'eau ou piste limite a été atteinte, mais aussi la limite de la mémoire. Soundpool va arrêter de jouer les anciens et/ou de-priorisés sons pour jouer un son nouveau.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X