Comment puis-je savoir si un son a terminé de jouer dans Android?

Comment puis-je savoir si un son a fini de jouer?

Je veux jouer à 2 sons mais je veux un son pour jouer et attendre que le 1er son soit terminé avant le 2ème démarrage.

Aussi, si je voulais faire autre chose lorsque le son est fini, comme le montre, la vue suivante dans une vue, pourrait-je faire cela?

À l'heure actuelle, j'utilise SoundPool pour jouer mes sons.

  • Problèmes avec Android Soundpool
  • AudioFlinger n'a pas pu créer de piste. Statut: -12
  • Android MediaPlayer setNextMediaPlayer () alternative
  • Comment arrêter tous les sons dans SoundPool?
  • Comment jouer des sons à des périodes précises sur différents appareils dans Android
  • Soundpool ne joue que les 5 premières secondes du fichier. Pourquoi?
  • Soundpool ne boucle pas l'Android 4.3
  • Uncaught exception lancé par le finalisateur java.lang.IllegalStateException: Binder a été finalisé
  • 4 Solutions collect form web for “Comment puis-je savoir si un son a terminé de jouer dans Android?”

    Utilisez la classe MediaPlayer et un OnCompletionListener

    Juste une idée … obtenez la durée du jeu sonore ogg / wav et utilisez votre propre classe SoundObject avec le membre de la minuterie. Mettez-le à jour dans une fonction de mise à jour. Si timer> maxtime + threshold, marquez-le comme terminé.

    La façon dont j'ai résolu cela est de créer une séquence d'animation contenant une image, un son et un retard. Je peux ensuite mettre en file d'attente afin que je puisse avoir une image affichée, et le son l'accompagne, puis passer à une autre image. Je fais cela avec un SoundPlayer et une vue personnalisée (pas une balle de vue, bien que vous pourriez probablement)

    L'astuce est que vous ne pouvez pas simplement interrompre le thread pour le délai, vous devrez utiliser un gestionnaire pour vous envoyer un message pour mettre à jour l'interface utilisateur dans le futur.

    Voici le gestionnaire

    handler = new Handler() { /* (non-Javadoc) * @see android.os.Handler#handleMessage(android.os.Message) */ @Override public void handleMessage(Message msg) { if (msg.what == NEXT_ITEM_MSG) { showNext(); } else if (msg.what == SEQUENCE_COMPLETE_MSG) { // notify the listener if (animationCompleteListener != null) { animationCompleteListener.onAnimationComplete(); } } } }; 

    La méthode showNext () saisit simplement l'élément suivant dans la séquence, met à jour la vue d'image, joue le son, puis planifie un message pour que le gestionnaire appelle showNext après la séquence.

     private void showNext() { if (mRunning) { // Get the first item AnimatedSequenceItem item = currentSequence.getNextSequenceItem(); if (item == null) { Message msg = handler.obtainMessage(SEQUENCE_COMPLETE_MSG); handler.sendMessage(msg); return; } // Show the first image showImage(item.getImageResId()); // Play the sound int iSoundResId = item.getSoundResId(); if (iSoundResId != -1) { playSound(iSoundResId); } // schedule a message to advance to next item after duration Message msg = handler.obtainMessage(NEXT_ITEM_MSG); handler.sendMessageDelayed(msg, item.getDuration()); } } 

    Bien sûr, tout cela vous oblige à déterminer et à corriger les retards, mais dans mon expérience, vous devez faire cela pour un jeu de toute façon. J'ai eu plusieurs cas où je voulais que le délai soit plus long que le son. Voici le code qui fait réellement des objets.

     battleSequence.addSequenceItem(R.drawable.brigands, R.raw.beep, 2000); battleSequence.addSequenceItem(R.drawable.black, winning ? R.raw.enemy_hit : R.raw.player_hit, 1500); 

    Avec cette approche, je peux avoir toutes sortes de logique pour ajouter des éléments d'animation, des durées de changement, des animations en boucle, etc. Il suffit d'effectuer un réglage précis pour obtenir les retards.

    J'espère que cela t'aides.

    Désolé, il est trop tard pour répondre. Mais j'ai utilisé isPlaying () API depuis mediaplayer pour attendre que la première chanson soit terminée.

     while(mediaPlyaer.isPlaying()){ } 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.