2013-06-17 5 views
-1

Je veux jouer deux fichiers de son différent lorsque l'utilisateur clique sur le boutonjouer deux sons avec onClick

@Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     playSound(this,R.raw.s1); 
     playSound(this,R.raw.s2); 

    } 

    public static void playSound(Context context, int soundID){  
     MediaPlayer mp = MediaPlayer.create(context, soundID); 
     mp.start(); 
     } 

le problème sur ce code est les fichiers s1 et s2 sont jouées sur le même temps, je veux jouer s1 puis si s1 finsh jouer s2 fichier, comment puis-je faire cela?

+0

Avez-vous essayé d'ajouter un CompletionListener à votre MediaPlayer? http://stackoverflow.com/questions/7367997/how-do-you-detect-when-a-sound-file-has-finished – verybadalloc

+0

Pour ce genre de chose, je recommande d'utiliser un 'SoundPool' au lieu d'un MediaPlayer (http : //developer.android.com/reference/android/media/SoundPool.html) –

+0

@KenWolf Pourquoi voulez-vous qu'il utilise un objet SoundPool? –

Répondre

0

Essayez ceci:

@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 
    MediaPlayer mp = MediaPlayer.create(context,R.raw.s1); 
    mp.start(); 
    mp.setOnCompletionListener(new OnCompletionListener() 
    { 
     public void onCompletion(MediaPlayer mp2){ 

      mp2 = MediaPlayer.create(context,R.raw.s2); 
      mp2.start(); 
     } 
    }); 
} 
0

Essayez ceci:

int[] sounds = new int[] {R.raw.s1, R.raw.s2};  
int counter = 0; 

@Override 
public void onClick(View v) { 
    playSound(sounds[counter]); 
} 

public void playSound(Context context, int soundID){  
    MediaPlayer mp = MediaPlayer.create(context, soundID); 
    mp.setOnCompletionListener(this); 
    mp.start(); 
} 

@Override 
public void onCompletion(MediaPlayer mp) { 
    counter++; 
    if (counter < sounds.length) { 
     playSound(sounds[counter]); 
    } 
} 

pas la chose la plus élégante que j'ai jamais écrit, mais il devrait répondre à vos besoins.