Как зациклить с помощью медиаплеера - Android - PullRequest
1 голос
/ 23 августа 2011

Как воспроизвести мои аудиофайлы последовательно с моей SD-карты? У меня есть два класса, один для результатов, другой для фактического рендеринга. Мой цикл while в правильном месте?

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

Мое приложение просто продолжает записывать результаты, не дожидаясь, пока первый перестанет играть первым. Я хочу, чтобы он сделал Render -> Play -> Подождите, пока весь звук не остановится -> Записать результат в файл -> Следующий файл.

Ответы [ 3 ]

3 голосов
/ 23 августа 2011

если вы хотите, чтобы они воспроизводились один за другим

, в медиаплеере есть событие

mp.setOnCompletionListener()

, которое сработает после завершения первого файла.здесь вы можете воспроизвести следующий файл.

1 голос
/ 23 августа 2011

в соответствии с вашим кодом вы должны использовать mp.setOnCompletionListener ().В этом укажите путь к следующему файлу, который вы хотите воспроизвести.

1 голос
/ 23 августа 2011

попробуйте этот код

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

}

...