2011-08-23 2 views
1
E/MediaPlayer(20473): error (-19, 0) 

I/MyApp (20473): Decoding lala.mp3 

I/StagefrightPlayer( 68): setDataSource('mypath') 

E/AudioFlinger( 68): no more track names available 

E/AudioTrack( 68): AudioFlinger could not create track, status: -12 

E/AudioSink( 68): Unable to create audio track 

Est-ce que any1 sait pourquoi je reçois ceci? Cela arrive généralement après avoir joué environ 100+ de fichiers audio en utilisant mediaPLayer. Je le joue comme çaerreur -19,0 ​​d'utiliser Mediaplayer?

public RenderResultFormat DoIt() { 
    if(mp!=null){ 
     mp.release(); 
     mp = null; 
    } 
AudioRenderer mr = new AudioRenderer(); mp = mr.AudioRenderer(filePath);} 



private class AudioRenderer extends Activity { 
    private MediaPlayer AudioRenderer(String filePath) { 
//delcare mediaplayer variables, path etc 
    mp= MediaPlayer.create(this, path); 
if(mp != null){ 
    int duration = mp.getDuration(); 
       mp.start(); 
       try { 
        Thread.sleep(duration); 
       } catch (InterruptedException e2) { 
        e2.printStackTrace(); 
        System.out.println("I've been interrupted >:("); 
       } 
       } 
}return mp;} 

Ai-je raté quelque chose? Tout nouveau pour le développement Android. Merci

+0

Est-ce que vous «libérez» MP après utilisation, comme recommandé dans le document? (http://developer.android.com/reference/android/media/MediaPlayer.html#release()) – Joubarc

+0

merci, je vais jeter un oeil là-dessus. Oui, j'ai publié mais je ne savais pas que vous devez déclarer mp = null à nouveau après votre libération. Je l'ai essayé – Sith

+0

Ok ça ne marche pas): – Sith

Répondre

3

Cette solution fonctionne bien pour moi (jouer une ressource). Il suffit de mettre en œuvre un

private void playbeep(int id) { 

    MediaPlayer mPlayer; 
    mPlayer = MediaPlayer.create(context, id); 
    mPlayer.start(); 
    mPlayer.setOnCompletionListener(new OnCompletionListener() {   
     public void onCompletion(MediaPlayer mp) { 
      mp.release(); 
     } 
    }); 
}