2012-06-16 10 views
6

Necesito su ayuda. Intenté reproducir un archivo de audio almacenado en la carpeta de Contenidos, pero ocurrió un error.Error de Android Media Player (1, -4) mientras reproduzco un audio de la carpeta Assets

Éstos son mi código:

try{ 
    if (player.isPlaying()) { 
    player.stop(); 
    player.release(); 
    } 
}catch(Exception e){ 
    Toast.makeText(this, "an exception occurred", Toast.LENGTH_LONG).show(); 
    e.printStackTrace(); 
} 
try{ 
    AssetFileDescriptor afd = BeeDailyConvo.this.getAssets().openFd("sounds/hello_kr.wma"); 
    player.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength()); 
    player.prepare(); 
    player.start(); 
}catch(Exception e){ 
    e.printStackTrace(); 
} 

Y aquí están mis Logcat:

06-16 22: 39: 53.330: W/MediaPlayer (13490): información/advertencia (1, 26)
06-16 22: 39: 53.330: E/MediaPlayer (13490): error (1, -4)

Podría explicar lo que está mal con mi código?

gracias de antemano

Saludos,

Priska

Respuesta

4

Este problema se ha resuelto.

El descriptor del archivo de activos debe estar cerrado antes de preparar el reproductor.Así es como he resuelto el problema:

player = new MediaPlayer(); 
AssetFileDescriptor afd = BeeDailyConvo.this.getAssets() 
    .openFd("sounds/"+file); 
player.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength()); 
afd.close();**//just added this line** 
player.prepare(); 
player.start(); 
+1

gracias ... funcionó para mí, pero sin afd.close(); trabajando en Samsung mi pestaña de 10 "ICS, pero no en Nexus 7 Jellybean ... después de agregar afd.close(); ¡¡¡trabajé en Jeallybean !! –

1

Por desgracia hay muy poca información acerca de los códigos de error MediaPlayer disponibles por alguna razón. Sin embargo, le sugiero que intente poner su archivo de sonido dentro de res/raw/en lugar de sus activos.

EDIT:

Comience aquí con la sección Uso del MediaPlayer en la documentación para desarrolladores. Esto le mostrará cómo configurar y reproducir el sonido correctamente.

EDIT 2:

resulta que puede hacerlo desde activos ver esta pregunta: Play audio file from the assets directory

+0

En realidad, yo almacena el nombre del archivo de audio en una base de datos y los archivos de audio reales en la carpeta de activos. Uso la consulta sqlite para recuperar el nombre de archivo de la base de datos, y la carpeta de audio en activos se reproducirá una vez que se haga clic en un archivo de audio específico. Porque no sé exactamente en qué audio se hace clic, así que no puedo ubicar los archivos de audio debajo de la carpeta res/raw. ¿alguna idea? –

+0

gracias por su respuesta. Sí, eso es lo que hice, pero me da un error como dije antes. –

3

Aquí se puede ver todos los códigos de error Media player Error codes

-4 código de error indica que tiene dados argumentos inválidos.

Ponga su código en el bloque try catch.

trate de usar

try { 
      AssetFileDescriptor afd = CustomListViewActivity.this.getAssets() 
        .openFd("sounds/hello_kr.wma"); 
      player.setDataSource(afd.getFileDescriptor()); 
     } catch (IllegalArgumentException e) { 
      e.printStackTrace(); 
     } catch (IllegalStateException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
+0

gracias por su respuesta. He intentado su sugerencia, no hay más errores (1, -4) pero me da otro error, el reproductor multimedia no se puede crear. aquí está mi logcat 06-16 23: 33: 53.350: W/System.err (14869): \t en android.media.MediaPlayer.setDataSource (método nativo) –

1

No creo que los archivos WMA son compatibles.

http://developer.android.com/guide/appendix/media-formats.html

me di cuenta de que no se especificó el audioStreamType

mediaPlayer.setAudioStreamType (AudioManager.STREAM_MISIC);

+0

Sí, noté que también he convertido mi archivo de audio a .wav formato, pero aún el mismo error "no se puede crear reproductor multimedia". ¿Dónde debo colocar la línea player.setAudioStream (AudioManager.STREAM_MUSIC)? editado: de todos modos hay una función setAudioSteamType en lugar de setAudioStream. –

0

uso de esta manera se va a resolver su problema :)

public void playBeep() { 
    try { 

     if (m.isPlaying()) { 
      m.stop(); 
      m.release(); 
      m = new MediaPlayer(); 
     } 
     AssetFileDescriptor descriptor = getAssets().openFd("mp3 name.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) { 
    } 
} 
Cuestiones relacionadas