Как я могу воспроизводить мои аудиофайлы последовательно с моей 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 → Подождите, пока весь звук перестанет воспроизводиться. → Запишите результат в файл → Следующий файл.
если вы хотите, чтобы они играли один за другим
в медиаплеере есть событие
mp.setOnCompletionListener()
который будет срабатывать после завершения первого файла. здесь вы можете воспроизвести следующий файл.
в соответствии с вашим кодом вы должны использовать mp.setOnCompletionListener(). В этом показан путь для следующего файла, который вы хотите воспроизвести.
попробуйте этот код
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();}
}
}