android MediaPlayer循环
我尝试播放循环Ogg文件,我尝试启用android MediaPlayer循环,android,media-player,Android,Media Player,我尝试播放循环Ogg文件,我尝试启用setLooping(true),但没有效果,所以我尝试了onCompletionListener,但这也不起作用,有人能澄清我做错了什么吗 musicPlayer = MediaPlayer.create(mContext, R.raw.overworld); musicPlayer.setVolume(musicVolume, musicVolume); // musicPlayer.setLooping(true); musicPlayer.setOn
setLooping(true)
,但没有效果,所以我尝试了onCompletionListener
,但这也不起作用,有人能澄清我做错了什么吗
musicPlayer = MediaPlayer.create(mContext, R.raw.overworld);
musicPlayer.setVolume(musicVolume, musicVolume);
// musicPlayer.setLooping(true);
musicPlayer.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
musicPlayer.stop();
musicPlayer.seekTo(0);
musicPlayer.start();
Log.d("Sound Manager", "Song Completed");
}
});
以下是我的游戏功能
public void playSong(int id) {
try {
stopSong();
musicPlayer = MediaPlayer.create(mContext, id);
musicPlayer.start();
} catch(Exception e) {
// Ignored
}
}
众所周知,MediaPlayer在ogg文件方面存在问题。 您可以更倾向于切换到另一种文件格式 另一件事是,我会继续尝试setLooping(布尔值),因为它很可能使用相同的方案,而且更清晰
如果停止
MediaPlayer
对象,则调用seekTo()会导致MediaPlayer处于无效状态。您可以调用pause()
,但我不会调用这些方法中的任何一个,为什么不只是查找呢?我猜如果您删除musicPlayer.stop()
它会工作。众所周知,MediaPlayer在ogg文件方面有问题。
remove ....
musicPlayer.stop();
from
onCompletion(MediaPlayer mp)
您可以更倾向于切换到另一种文件格式
另一件事是,我会继续尝试setLooping(布尔值),因为它很可能使用相同的方案,而且更清晰
如果停止MediaPlayer
对象,则调用seekTo()会导致MediaPlayer处于无效状态。您可以调用pause()
,但我不会调用这些方法中的任何一个,为什么不只是查找呢?我猜如果您删除musicPlayer.stop()
,它会工作。onCompletionListener()
如果您的MediaPlayer设置为循环,则不会调用它,但如果您没有将其设置为循环,则始终可以使用这样的完成侦听器
remove ....
musicPlayer.stop();
from
onCompletion(MediaPlayer mp)
@Override
public void onCompletion(MediaPlayer mp) {
if(!mp.isPlaying()) {
mp.start();
}
mp.seekTo(0);
}
您也不应该调用stop()
,因为这样会完全停止播放,而且在您未播放的视频/歌曲中查找也没有意义。onCompletionListener()
如果您的MediaPlayer
设置为循环,则不会调用onCompletionListener()
,但如果您没有将其设置为循环,您总是可以像这样使用完成侦听器
@Override
public void onCompletion(MediaPlayer mp) {
if(!mp.isPlaying()) {
mp.start();
}
mp.seekTo(0);
}
您也不应该调用stop()
,因为这样会完全停止播放,并且在您未播放的视频/歌曲中查找是没有意义的。这是一首歌曲,不是SFX,同一文件的Mp3是3mb,而在Ogg格式中,它是600KB无更改的…Log.d永远不会显示在LogCat中,侦听器甚至没有启动?解决方案是在每次调用MediaPlayer.create或set musicPlayer.setLooping(true)后附加OnCompletionListener;每次呼叫MediaPlayer后。create@GideonKain酷!我想你无法从代码中看到这一点。当然,当MediaPlayer.create创建一个全新的实例时,它如何知道预先分配的MediaPlayer实例已设置循环(true)。)有没有一种方法可以在不使用MediaPlayer.create的情况下更改正在播放的声音?或者这就是它的工作方式?它是一首歌曲而不是SFX,同一个文件的Mp3是3mb,而在Ogg格式中它是600KB无更改…Log.d永远不会出现在LogCat中,侦听器甚至没有启动?解决方案是在每次调用MediaPlayer.create或set musicPlayer.setLooping(true)后附加OnCompletionListener;每次呼叫MediaPlayer后。create@GideonKain酷!我想你无法从代码中看到这一点。当然,当MediaPlayer.create创建一个全新的实例时,它如何知道预先分配的MediaPlayer实例已设置循环(true)。)有没有一种方法可以在不使用MediaPlayer.create?的情况下更改正在播放的声音,或者这就是它的工作方式?