2017-07-20 3 views
0

Dans mon application Android, l'utilisateur peut cliquer sur différentes vues pour produire des sons de piano. Mes sons sont stockés dans le dossier raw (do_note.mp3, re_note.mp3, ...)android jouer plusieurs sons

Mon problème est que lorsque l'utilisateur clique sur une vue, un son est produit mais après 6 ou 7 clics, les sons s'arrêtent et il n'y a plus de suite. voici mon code de fonction:

public int playSound(String tag){ 



      id = context.getResources().getIdentifier(tag, "raw", context.getPackageName()); 


      int soundId = sp.load(context, id,1); 

      MediaPlayer mPlayer = MediaPlayer.create(context,id); 

      mPlayer.start(); 



     } 
+0

Soundpool est meilleur pour ce type d'application. –

Répondre

1

Toujours vérifier si mPlayer déjà arrêté

 @Override 
     public void onClick(View v) { 

      if(mPlayer.isPlaying()) 
      { 
       mPlayer.stop(); 
       mPlayer.reset(); 
      } 
      try { 

       AssetFileDescriptor afd; 
       afd = getAssets().openFd("your.sound"); 
       mPlayer.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength()); 
       mPlayer.prepare(); 
       mPlayer.start(); 
      } catch (IllegalStateException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

     } 
    }); 

Vous pouvez changer de méthode onClick() et mettre le code à votre fonction

Hope this vous aide

+0

Salut, toujours le même problème, je peux juste jouer du son alors rien ne joue. J'ai regardé dans LogCat et j'ai observé cet avertissement: setSubtitleAnchor dans MediaPlayer – Soufiane

1

Merci JakSok

votre réponse me guider pour trouver la solution, en fait je dois appeler des méthodes de réinitialisation et de libération pour mon MediaPlayer, ceci est ma solution:

if(mPlayer.isPlaying()) { 
     mPlayer.stop(); 
    } 

     int id = getResources().getIdentifier(fileName, "raw", getPackageName()); 
     mPlayer.reset(); 
     mPlayer.release(); 
     mPlayer = MediaPlayer.create(this,id); 
     mPlayer.start();