2010-12-08 14 views
1

J'ai sorti ma première application Android il y a deux semaines (un MMO appelé Agent Syndicate) et tout a bien fonctionné, sauf pour les sons et la musique! En utilisant des fichiers MP3 standard créés dans la Sound Forge Pro 10 de Sony à 128kps, j'ai immédiatement reçu des rapports de nombreux utilisateurs se plaignant des problèmes de Force Close sur une grande variété de combinés, fonctionnant principalement sous Android 2.1 et 2.2. J'ai sorti une nouvelle version qui a tous les sons désactivés, et les plaintes ont cessé. J'aimerais vraiment avoir des sons, donc c'est loin d'être idéal.Android MP3 MediaPlayer plante quelques combinés

Je n'ai pas accès aux ressources pour tester le jeu sur autre chose que mon téléphone personnel et l'émulateur (où tout fonctionne parfaitement), mais il est évident qu'il y a un problème majeur pour beaucoup de joueurs!

Est-ce que je ne devrais pas utiliser de MP3? Existe-t-il une méthode universelle qui fonctionne le mieux pour tous les combinés pour la simple lecture de fichiers audio simples?

C'est ce que j'utilise pour commencer mes effets sonores:

final MediaPlayer player = MediaPlayer.create(GlobalState.Instance, resId); 
player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() 
{ 
    public void onCompletion(MediaPlayer mp) 
    { 
     mp.release(); 
    } 
}); 
player.setVolume(0.5f, 0.5f); 
player.start(); 

Au départ, j'appelle player.prepare() avant player.start(), mais je continuais à IllegalStateExceptions sur certains des fichiers sonores . Une partie de l'information là-bas est très confuse sur quand exactement appeler ces méthodes, et ce que l'exception signifie. La suppression de player.prepare() m'a permis de travailler 100% du temps sur l'émulateur et mon périphérique de développement local.

Répondre

0

Il ne devrait pas y avoir de problème d'utilisation de MediaPlayer pour la musique, mais pour l'effet sonore j'utiliserais plutôt la classe SoundPool. Je suppose que vous obtenez le IllegalStateExceptions parce que vous démarrez le MediaPlayer avant la fin de la préparation du joueur. Le moyen correct serait d'introduire un onPreparedListener pour le MediaPlayer et le début est à partir de là. Exécutez-vous MediaPlayer sur le thread principal de l'interface utilisateur?

+0

Faites très attention à SoundPool car il décompresse, en mémoire, tous les sons que vous y ajoutez. Utilisez-le uniquement pour les super petits sons (<1s). Le chargement de n'importe quoi, même de loin, entraînera une exception de mémoire. – ADB