2012-06-16 14 views
6

Ho bisogno del tuo aiuto. Ho provato a riprodurre un file audio memorizzato nella cartella Risorse ma si è verificato un errore.Errore lettore multimediale Android (1, -4) durante la riproduzione di un audio dalla cartella Assets

Ecco il mio codice:

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(); 
} 

Ed ecco i miei logcat:

06-16 22: 39: 53,330: W/MediaPlayer (13490): informazioni/avviso (1, 26)
06-16 22: 39: 53,330: E/MediaPlayer (13490): errore (1, -4)

Potrebbe spiegare cosa c'è di sbagliato con il mio codice?

Grazie in anticipo

saluti,

Priska

risposta

4

Questo problema è stato RISOLTO.

Il descrittore del file di asset deve essere chiuso prima di preparare il lettore.Ecco come ho risolto il 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

grazie .. ha funzionato per me, ma senza afd.close(); lavorando in Samsung la mia scheda ICS da 10 ", ma non in Nexus 7 Jellybean .. dopo aver aggiunto afd.close(); ha funzionato in Jeallybean !! –

1

Purtroppo ci sono pochissime informazioni sui codici di errore MediaPlayer disponibili per qualche motivo. Comunque ti suggerisco di provare a mettere il tuo file audio dentro res/raw/invece delle tue risorse.

EDIT:

Inizia da qui con la sezione Uso MediaPlayer nella documentazione per gli sviluppatori. Questo ti mostrerà come impostare e riprodurre correttamente l'audio.

EDIT 2:

scopre che può farlo da attività vedono questa domanda: Play audio file from the assets directory

+0

In realtà ho memorizzato il nome del file audio in un database e le vere file audio nella cartella Assets. Uso la query sqlite per recuperare il nome del file dal database e la cartella audio nella cartella delle risorse verrà riprodotta dopo aver fatto clic su un file audio specifico. Perché io non so esattamente quale audio è stato cliccato, quindi non posso posizionare i file audio sotto la cartella res/raw. qualche idea? –

+0

grazie per la tua risposta. Sì, è quello che ho fatto ma mi dà un errore come ho detto prima. –

3

Qui potete vedere tutti i codici di errore Media player Error codes

-4 codice di errore indica la presenza di dati argomenti non validi.

Inserire il codice nel blocco di prova.

provare a utilizzare

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

grazie per la tua risposta. Ho provato il tuo suggerimento, non più errore (1, -4) ma mi dà un altro errore, il lettore multimediale non può essere creato. ecco il mio logcat 06-16 23: 33: 53.350: W/System.err (14869): \t su android.media.MediaPlayer.setDataSource (metodo nativo) –

1

Non credo che i file wma sono supportati.

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

ho notato che non è stato specificato l'audioStreamType

mediaPlayer.setAudioStreamType (AudioManager.STREAM_MISIC);

+0

Sì, ho notato anche che ho convertito il mio file audio in .wav formato, ma ancora lo stesso errore "impossibile creare il lettore multimediale". Dove devo posizionare la linea player.setAudioStream (AudioManager.STREAM_MUSIC)? modificato: comunque c'è la funzione setAudioSteamType invece di setAudioStream. –

0

uso questo modo si risolverà il vostro 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) { 
    } 
} 
Problemi correlati