2011-08-23 71 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 

有沒有人知道我爲什麼要這麼做?這通常在使用mediaPLayer播放大約100多個音頻文件後發生。我是這樣彈的從Mediaplayer錯誤-19,0?

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

我是否錯過了什麼?相當新的android開發。謝謝

+0

你是否在使用後釋放mp,如文檔中推薦的那樣? (http://developer.android.com/reference/android/media/MediaPlayer.html#release()) – Joubarc

+0

謝謝,我會看看。是的,我釋放了,但我不知道你需要在釋放後再次聲明mp = null。我試試看 – Sith

+0

好吧,這不起作用): – Sith

回答

3

這個解決方案適合我(打資源)。只實施一個OnCompletionListener

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