我的应用程序的资产目录中有多个音频文件。当用户点击一个按钮时,我想按照一定的顺序播放这些文件,一个接一个地播放。音频文件之间不应该有明显的延迟。实现这一目标的最佳方法是什么?如何播放一个接一个的音频文件
我正在考虑使用MediaPlayer
对象和OnCompletionListener
s。但是,这意味着我必须创建很多OnCompletionListener
,因为我需要知道每次下一个音频文件。我错过了什么,或者有更好的方法吗?
我的应用程序的资产目录中有多个音频文件。当用户点击一个按钮时,我想按照一定的顺序播放这些文件,一个接一个地播放。音频文件之间不应该有明显的延迟。实现这一目标的最佳方法是什么?如何播放一个接一个的音频文件
我正在考虑使用MediaPlayer
对象和OnCompletionListener
s。但是,这意味着我必须创建很多OnCompletionListener
,因为我需要知道每次下一个音频文件。我错过了什么,或者有更好的方法吗?
你是对的,不需要很多OnCompletionListener's。
//define a variable to be used as index.
int audioindex = 0;
//Extract the files into an array
String[] files = null;
files = assetManager.list("audiofiles");
然后在你的OnCompletionListener中。
mp.setOnCompletionListener(new OnCompletionListener(){
// @Override
public void onCompletion(MediaPlayer arg0) {
// File has ended, play the next one.
FunctionPlayFile(files[audioindex]);
audioindex+=1; //increment the index to get the next audiofile
}
});
检查这一点,这些类可播放MP3的网址一个又一个,我创造了他们大约在某些时候,并且可以调整从资产打........
创建资源目录的原始文件夹,并把在那里,你的声音文件
现在...使用PlayMedia像这样
int[] soundIDs = {R.raw.yes, R.raw.eat};
PlayMedia playAudio = new PlayMedia(context,soundIDs);
playAudio.execute();
,并定义PlayMedia类像这个
import android.content.Context;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.AsyncTask;
import android.util.Log;
public class PlayMedia extends AsyncTask<Void, Void, Void> {
private static final String LOG_TAG = PlayMedia.class.getSimpleName();
Context context;
private MediaPlayer mediaPlayer;
int[] soundIDs;
int idx =1;
public PlayMedia(MediaPlayer mediaPlayer) {
this.mediaPlayer = mediaPlayer;
}
public PlayMedia(final Context context, final int[] soundIDs) {
this.context = context;
this.soundIDs=soundIDs;
mediaPlayer = MediaPlayer.create(context,soundIDs[0]);
setNextMediaForMediaPlayer(mediaPlayer);
}
public void setNextMediaForMediaPlayer(MediaPlayer player){
player.setOnCompletionListener(new OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
if(soundIDs.length>idx){
mp.release();
mp = MediaPlayer.create(context,soundIDs[idx]);
setNextMediaForMediaPlayer(mp);
mp.start();
idx+=1;
}
}
});
}
@Override
protected Void doInBackground(Void... params) {
try {
mediaPlayer.start();
} catch (IllegalArgumentException e) {
Log.e(LOG_TAG, "", e);
} catch (SecurityException e) {
Log.e(LOG_TAG, "", e);
} catch (IllegalStateException e) {
Log.e(LOG_TAG, "", e);
}
return null;
}
}
我尝试过,但后4-5秒的音频突然停止......你知道这是为什么发生? – 2015-10-12 09:52:35
好的答案.... – vnshetty 2011-08-16 04:07:09