2010-10-25 7 views
1

J'ai créé une application qui utilise MediaPlayer pour jouer un son aléatoire (court) quand on clique sur un bouton. Les sons sont lus correctement sur les appareils Android < 2.2. C'est le code responsable de la lecture des sons.Mediaplayer joue des sons étranges sur Android 2.2

r = new Random(); 
sounds = new ArrayList<MediaPlayer>(); 
sounds.add(MediaPlayer.create(this, R.raw.sound1)); 
sounds.add(MediaPlayer.create(this, R.raw.sound2)); 
sounds.add(MediaPlayer.create(this, R.raw.sound3)); 
sounds.add(MediaPlayer.create(this, R.raw.sound4)); 
sounds.add(MediaPlayer.create(this, R.raw.sound5)); 

theButton.setOnClickListener(new OnClickListener() { 

    public void onClick(View v) { 
     playSound(); 
    } 
}); 

private void playSound() { 
    Thread thread = new Thread() { 
     public void run() { 
      MediaPlayer soundPlayer = sounds.get(r.nextInt(sounds.size())); 
      while (soundPlayer.isPlaying()) 
      { 
       soundPlayer = sounds.get(r.nextInt(sounds.size())); 
      } 
      soundPlayer.seekTo(0); 
      soundPlayer.start(); 
     } 
    }; 
    thread.start(); 
} 

Les sons sont tous des fichiers .wav. J'ai essayé de les convertir en .mp3, mais ensuite ils ne joueraient pas du tout. Est-ce que je fais quelque chose d'extrêmement faux, ou est le MediaPlayer dans 2.2 buggy? Quelqu'un d'autre a eu ce problème et connaît une solution? Gardez à l'esprit que les sons sont joués normalement sur tous les autres appareils avec une version Android 2.2 ci-dessous.

+0

J'ai le même problème ici. Y at-il un moyen sans le besoin de rééchantillonner les fichiers wav? – StefanMK

Répondre

0

Il semble qu'il y ait eu un problème avec la fréquence d'échantillonnage des mp3 que le Framework 2.2 a désapprouvé. Je l'ai réparé en ouvrant les sons dans un éditeur de son, en les rééchantillonnant et en ajoutant du silence à la première et à la dernière seconde des sons.

0

Je pense que vous ne devriez pas créer un ArrayList pour MediaPlayer. Au lieu de cela, vous utilisez uniquement un objet MediaPlayer et une ArrayList pour contenir toutes les ressources musicales.

Lors de la prochaine autre chanson, vous mettez à jour uniquement les informations de MediaPlayer. Par exemple, Libère l'objet MediaPlayer précédent. Créer un autre objet MediaPlayer Enfin, commencez cette chanson

+1

Je suis d'accord avec vous sur une base générale, mais la préparation de ces sons courts prend un temps court et visible. Il est censé être un son instantané aléatoire lorsqu'un utilisateur clique sur un bouton. Dans tous les cas, l'utilisation d'un seul MediaPlayer ne résout pas le problème de sons déformés sur Android 2.2. J'ai cependant trouvé une solution que je posterai comme réponse. – AmITheRWord

Questions connexes