2011-08-23 29 views
1

如何從我的SD卡播放我的音頻文件?我有兩個類,一個用於實際渲染的另一個結果。 我的while循環是否在正確的位置?如何循環使用mediaplayer - Android

public void DoIt() { 
while(!mp.isPlaying()){ 


AudioRenderer mr = new AudioRenderer(); 
mp = mr.AudioRenderer(filePath); 
if(mp!=null){ 
mp.start(); 
if(!mp.isPlaying()) 
    break; 
} 
} 

if(mp == null){ *write results logic*} 



private class AudioRenderer extends Activity { 
private MediaPlayer AudioRenderer(String filePath) { 


MediaPlayer mp = new MediaPlayer(); 
File location = new File(filePath); 

Uri path = Uri.fromFile(location); 
ExtentionSeperator media = new ExtentionSeperator(filePath, '.'); 
if(ext.equals("mp3") || ext.equals("wav")|| ext.equals("ogg")|| ext.equals("mid")|| 
ext.equals("flac")){ 


     mp= MediaPlayer.create(this, path);} 
       return mp;} 

我的應用程序只是不斷無需等待第一個停止先打寫的結果。我想要渲染 - >播放 - >等待整個音頻停止播放 - >將結果寫入文件 - >下一個文件。

+0

請格式化您的代碼 –

+0

格式化完成 – Sith

+0

請不要問同樣的問題兩次。謝謝 – Kev

回答

3

如果你想讓他們到其他

後玩一個沒有在媒體播放器

mp.setOnCompletionListener() 

事件一旦第一個文件是完整的,這將觸發。在這裏你可以播放下一個文件。

1

試試這個代碼

class MediaDemo extends Activity{ 
    public static MediaPlayer myplayer=new MediaPlayer(); 
    public static ArrayList<String> pathlist=new ArrayList<String>(); 
    public void onCreate(Bundle savedInstanceState){ 
     myplayer.reset(); 
     myplayer.setOnCompletionListener(new OnCompletionListener(){ 
     public void onCompletion(MediaPlayer arg0) { 
      pathlist.remove(0); 
      if(pathlist.size()>=1){ 
       myplayer.reset(); 
       playAudio(); 
      } 
     } 
    }); 
pathlist.add("filename"); 
if(!myplayer.isPlaying()){ 
    playAudio(); 
} 
} 
public void playAudio(){ 
    try{ 
     if(pathlist.size()>=1){ 
      String path=pathlist.get(0); 
      myplayer.setDataSource(path); 
      myplayer.prepare(); 
      myplayer.start(); 
     } 
    }catch(Exception e){e.printStackTrace();} 
} 

}

+0

這很好,但我不能使用mediaplayer.prepare,我需要使用\t mp = MediaPlayer.create(this,path); – Sith

+0

沒問題,先聲明Mediaplayer變量。然後使用您的技術創建對象(mp = MediaPlayer.creat(this,path);不要調用mp.prepare(),而是調用mp.start(); –

+0

不,不如\t mp = MediaPlayer.create (this,path);在onCompletionListener方法中不起作用。 – Sith

1

根據你的代碼,你必須使用mp.setOnCompletionListener()。在這給你想要播放的下一個文件的路徑。