140 votes

Jouer le fichier audio à partir du répertoire des ressources

J'ai le code suivant:

    AssetFileDescriptor afd = getAssets().openFd("AudioFile.mp3");
    player = new MediaPlayer();
    player.setDataSource(afd.getFileDescriptor());
    player.prepare();
    player.start();

Le problème est que, lorsque j'exécute ce code, il commence à jouer tous les fichiers audio dans le répertoire actif, dans l'ordre alphabétique au lieu de simplement de jouer le fichier audio que j'ai demandé. Ce que je fais mal? Est-il une meilleure façon de jouer des fichiers audio à partir du répertoire des ressources?

Question de suivi: Est-il une différence entre la conservation des fichiers audio dans le répertoire actif et les garder dans la res/raw répertoire? Outre le fait qu'ils ne reçoivent pas les id si ils sont dans le répertoire actif. Si je déplace les fichiers audio dans le res/raw dossier puis j'ai un problème avec la réutilisation MediaPlayers car il n'y a pas de paramètre id de setDataSource(). Je ne peux pas trouver une bonne ligne de conduite pour la manipulation de ce type de problème.

250voto

Sarwar Erfan Points 11946
player.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());

Votre version de travail si vous aviez un seul fichier dans l'actif de l' répertoire. Le répertoire actif contenu ne sont pas réellement réel des fichiers" sur le disque. Tous d'entre eux sont mis en place l'un après l'autre. Alors, si vous ne spécifiez pas par où commencer et comment le nombre d'octets à lire, le lecteur lire jusqu'à la fin (qui est, permet de garder la lecture de tous les fichiers dans des actifs annuaire)

81voto

Siddhpura Amit Points 3562

Cette fonction fonctionne correctement :)

public void playBeep() {
    try {
        if (m.isPlaying()) {
            m.stop();
            m.release();
            m = new MediaPlayer();
        }

        AssetFileDescriptor descriptor = getAssets().openFd("beepbeep.mp3");
        m.setDataSource(descriptor.getFileDescriptor(), descriptor.getStartOffset(), descriptor.getLength());
        descriptor.close();

        m.prepare();
        m.setVolume(1f, 1f);
        m.setLooping(true);
        m.start();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X