tipo - reproductor de audio en android studio ejemplo#2
Reproducir archivo de audio desde el directorio de activos (2)
Tengo el siguiente código:
AssetFileDescriptor afd = getAssets().openFd("AudioFile.mp3");
player = new MediaPlayer();
player.setDataSource(afd.getFileDescriptor());
player.prepare();
player.start();
El problema es que, cuando ejecuto este código, comienza a reproducir todos los archivos de audio en el directorio de activos, en orden alfabético en lugar de simplemente reproducir el archivo de audio que solicité. ¿Qué estoy haciendo mal? ¿Hay una mejor manera de reproducir archivos de audio desde el directorio de activos?
Pregunta de seguimiento: ¿Existe alguna diferencia entre mantener archivos de audio en el directorio de activos y mantenerlos en el directorio res / raw? Además del hecho de que no obtienen identificadores si están en el directorio de activos. Si muevo los archivos de audio a la carpeta res / raw, entonces tengo un problema con la reutilización de MediaPlayer
porque no hay un parámetro de id para setDataSource()
. No puedo encontrar una buena pauta para manejar este tipo de problema.
Esta función funcionará correctamente :)
// MediaPlayer m; /*assume, somewhere in the global scope...*/
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();
}
}
player.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());
Su versión funcionaría si tuviera solo un archivo en el directorio de activos. Los contenidos del directorio de activos no son realmente ''archivos reales'' en el disco. Todos ellos están juntos uno tras otro. Entonces, si no especifica dónde comenzar y cuántos bytes leer, el reproductor leerá hasta el final (es decir, seguirá reproduciendo todos los archivos en el directorio de activos)