2012-04-13 3 views
0

J'ai un objet MediaPlayer à travers lequel je joue un son sur un clic d'un bouton.le fichier son est 1-2 secondes seulement.Lorsque je suis en cliquant sur le bouton correspondant l'un après l'autre (rapidement), il ne joue pas le son à deux reprises (il joue juste once.I a essayé avec un code comme ceci:android Mediaplayer pas jouer trop vite

public void onClick(View view) { 
if(DrawSound.isPlaying()) { 
      DrawSound.stop(); 
     DrawSound.prepareAsync(); 
     } 
     DrawSound.start(); 
} 

il est wokring.Search pas beaucoup, mais pourrait faire work.Any aider !!!!

+0

Qu'est-ce que DrawSound et qu'est ce que slotDrawSound? – Deva

+0

@Deva ils sont same.Sorry j'ai édité ma question. –

Répondre

0

Hé les gars si quelqu'un peut obtenir l'aide de ceci:

juste résoudre mon problème avec un tour (après tout astuce peut faire tout: p)

j'ai pris 2 objet MediaPlayer et une référence MediaPlayer et écrit comme ceci:

soundPlayer = DrawSound.isPlaying() ? DrawSound1 : DrawSound; 
soundPlayer.start(); 
+0

vous pouvez également le faire avec un seul objet. –

+0

oh vraiment? comment puis-je faire cela avec un seul objet? –

+0

mettre en œuvre la deuxième partie du code de ma réponse dans votre événement de clic de bouton ... –

0

Essayez d'utiliser au lieu de préparer prepareAsync

+0

J'ai utilisé prepare() avant que cela ne fonctionne pas. –

0

Ceci est parce que vous n'êtes pas libérant lecteur multimédia après son terminé la lecture de votre son ... utiliser la méthode release et reset dans Lecteurs setOnCompletionListener Méthode ...

vous pouvez l'utiliser comme ça ...

if(mp.isPlaying()) { 
        try { 
         mp.stop(); 
         mp.reset(); 
         mp.prepare(); 
        } catch (IllegalStateException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } catch (IOException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 
        } 
       mp.start(); 
} 

ou vous pouvez l'utiliser ...

  mp.stop();   
      mp.prepareAsync(); 
      mp.setOnPreparedListener(new OnPreparedListener() { 

       @Override 
       public void onPrepared(MediaPlayer mp) { 
        mp.start(); 
       } 
      }); 

Cela fonctionne très bien pour moi.

+0

j'utilise release puis j'utilise reset iyt montre l'exception illegalargument. –

+0

ne le libère pas si vous voulez l'utiliser de nouveau le même objet MediaPlayer utilise simplement reset(). –

+0

réinitialiser utilisé seulement cela ne fonctionne pas. –

-1

Essayez et voir si cela fonctionne:

if(DrawSound.isPlaying()) {   
      DrawSound.stop();   
      DrawSound.prepareAsync(); 
      DrawSound.setOnPreparedListener(new OnPreparedListener() { 

       @Override 
       public void onPrepared(MediaPlayer mp) { 
        DrawSound.start(); 
       } 
      }); 
      } 
+0

lançant IllegalArgument Exception. –

+0

s'il vous plaît modifier votre question et mettre tout le code pertinent avec le logcat – Deva