Quelle est la meilleure façon d'obtenir un fichier audio durée dans Android?

Je suis en utilisant un SoundPool à jouer des clips audio dans mon application. Tout est très bien, mais j'ai besoin de savoir quand la lecture du clip est terminé.

Au moment où je trace dans mon application par l'obtention de la durée de chaque élément à l'aide d'un MediaPlayer instance. Cela fonctionne bien mais il semble un gaspillage de charger chaque fichier deux fois, juste pour obtenir la durée. J'ai pu calculer approximativement la durée de me connaissant la longueur de la file (disponible à partir de la AssetFileDescriptor), mais j'ai encore besoin de connaître la fréquence d'échantillonnage et le nombre de canaux.

Je vois deux solutions possibles à ce problème:

  1. De déterminer quand un clip a fini de jouer (ne semble pas être possible avec SoundClip).
  2. Avoir une classe qui pourrait charger juste l'en-tête d'un fichier audio et de me donner le taux d'échantillonnage/nombre de canaux (et, idéalement, le nombre d'échantillon pour obtenir la durée exacte).

Des suggestions?

Grâce,
Max

Le code que j'utilise en ce moment (fonctionne très bien mais est assez lourd pour la fin):

String[] fileNames = ...
MediaPlayer mp = new MediaPlayer();
for (String fileName : fileNames) {
    AssetFileDescriptor d = context.getAssets().openFd(fileName);
    mp.reset();
    mp.setDataSource(d.getFileDescriptor(), d.getStartOffset(), d.getLength());
    mp.prepare();
    int duration = mp.getDuration();
    //...
}

Sur une note de côté, cette question a déjà été demandé mais n'ai reçu aucune réponse.

avez-vous envisagé une onCompletitionListener? developer.android.com/reference/android/media/...
cela ne fonctionne pas (jamais appelé) sur l'un des périphériques que j'ai. Même si elle est appelée sur certaines versions d'OS / certains appareils, il est peu fiable et donc inutiles.
vous re-vérifier tout que setOnCompletitionListner est appelée après .start()?
L'achèvement de l'écouteur est utilisé uniquement pour MediaPlayer, pas pour SoundPool. Autant que je sache, la seule façon d'avoir un rappel sur une bonne finition, avec un lecteur multimédia, pas un SoundPool.

OriginalL'auteur Gilead | 2011-01-17