因此,对于我正在开发的应用程序,我有一堆音频文件,根据某些变量的状态,这些文件可能会播放也可能不会播放(播放顺序也会改变)。
我了解 setOnCompletionListener
的基础知识,但我想不出使用它的最佳方式。截至目前,如果我想播放 audio1、audio2,然后是 audio3,我的代码设置如下:
clipSetup(1);
aP.setOnCompleteListener(new MediaPlayer.OnCompletionListener(){
@Override
public void onCompletion(MediaPlayer mp){
clipSetup(2);
aP.setOnCompleteListener(new MediaPlayer.OnCompletionListener(){
@Override
public void onCompletion(MediaPlayer mp){
clipSetup(3);
}
});
}
});
private MediaPlayer clipSetup(int i){
switch (i){
case 1:
aP = MediaPlayer.create(this, R.raw.audio1);
aP.start();
break;
case 2:
aP = MediaPlayer.create(this, R.raw.audio2);
aP.start();
break;
case 3:
aP = MediaPlayer.create(this, R.raw.audio3);
aP.start();
break;
}
return aP;
}
这可行,但非常丑陋,尤其是当我出于某些目的必须播放超过 15 个文件时。有没有更好的方法来完成我上面的内容?
最佳答案
我以前没有处理过音频文件,但这是我最好的一张照片
这是一个很好的开始。这只允许您将文件添加到将一个接一个播放的缓冲区。调用 addInitFile() 启动一个音频文件,然后调用 addFile() 添加更多文件以在第一个文件之后继续播放。这只是一个开始和未经测试就拼凑在一起的代码
它可能是更好的代码,但这只是一个开始。至少比 case switch 好
出于可访问性目的,我会将其设为内部类
public class CustomMediaBuffer{
public static ArrayList<Integer> buffer = new ArrayList<Integer>();
public static void addInitFile(final int res){
buffer.add(res);
ap = MediaPlayer.create(this, res);
ap.start();
ap.setOnCompleteListener(new MediaPlayer.OnCompletionListener(){
public void onCompletion(MediaPlayer mp){
int indx = buffer.indexOf(res);
if(buffer.size()-1>index){
ap = MediaPlayer.create(this, buffer.get(indx+1));
ap.start();
}
}
});
}
public static void addFile(int res){
buffer.add(res);
}
}
这是更好的更新代码:
public class CustomMediaBuffer{
public static ArrayList<MediaPlayer> buffer = new ArrayList<MediaPlayer>();
public static void addInitFile(final int res){
final MediaPlayer mp= MediaPlayer.create(this, res );
buffer.add(mp);
ap = buffer.get(0);
ap.start();
ap.setOnCompleteListener(new MediaPlayer.OnCompletionListener(){
public void onCompletion(MediaPlayer media){
int indx = buffer.indexOf(mp);
if(buffer.size()-1>index){
ap = buffer.get(indx+1));
ap.start();
}
}
});
}
public static void addFile(final int res){
final MediaPlayer mp= MediaPlayer.create(this, res );
mp.setOnCompleteListener(new MediaPlayer.OnCompletionListener(){
public void onCompletion(MediaPlayer media){
int indx = buffer.indexOf(mp);
if(buffer.size()-1>index){
ap = buffer.get(indx+1));
ap.start();
}
}
});
buffer.add(mp);
}
}
关于java - 你如何在Java中顺序播放音频文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27881684/