在Android应用中,我使用MediaPlayer播放声音文件。
这仅供个人使用,不会发布。
我有几个声音文件的引用:
MediaPlayer dooropen = MediaPlayer.create(MainActivity.this, R.raw.dooropen);
MediaPlayer doorclose = MediaPlayer.create(MainActivity.this, R.raw.doorclose);
//...
例如,开门声音片段的长度是2秒,所以在播放之后我睡了2.5秒然后播放门关闭声音片段,就像这样
dooropen.start();
try{ Thread.sleep(2500); }catch(InterruptedException e){ }
doorclose.start();
我遇到的问题是我的一些声音文件没有按我订购的顺序播放。
似乎没有任何理由可以播放某些声音文件,因为如果我在我的onCreate()程序的顶部播放它们都会播放,只有当我尝试按特定顺序播放它们时才会播放它们
答案 0 :(得分:2)
你应该实现媒体播放器的setOnCompletionListener()
以在播放完成后获得回叫,然后加载另一个需要开始播放的音频文件。
有关媒体播放器状态,请参阅MediaPlayer Documentation。
答案 1 :(得分:0)
是的,您可以将MediaPlayer与oncompletionListener一起使用,也可以在完成一个音频后尝试重置媒体播放器。示例代码在这里。您还可以使用会话ID来跟踪正在播放的文件以及从哪个文件开始。
mPlayer = new MediaPlayer();
//set other attributes here
mPlayer.setAudioSessionId(1);
mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
//check which audio session was playing and set new datasource and session
mPlayer.reset();
//set other data source here and different session id
}
});
希望它能解决你的问题。
答案 2 :(得分:0)
如果您想按顺序播放声音,请尝试以下操作:
mp1.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mp2.start();
}
});
mp2.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mp3.start();
}
});
mp3.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mp1.start();
}
});