这可能吗?在我的特定应用程序中,音轨有一个介绍,应该只在应用程序启动时播放一次。然后音乐将转换到“主音轨”(当然它是所有MP3),但是当音轨结束时,它应该只循环回到介绍结束时的点 - 即,不再播放介绍。
一个更常见的例子是从正面开始的普通歌曲,然后播放歌曲,然后在最后循环合唱以淡出.......
我只能找到一种方法将实际循环设置为开或关 -
musicPlayer.setLooping(true); //No way to set loop points?!
在下图中,循环由虚线表示。
有什么想法吗?
答案 0 :(得分:1)
创建辅助方法以获取主音轨的startingPosition
和seekTo()
整个音轨(前奏+主音色)结束后的位置。
使用标记来了解它是否是第一次。如果没有,则循环回到获得的搜寻位置。
public int getMainAudioStartingPosition() {
// position value in int.
return MAIN_AUDIO_STARTING_POSITION;
}
创建另一个playMedia方法,将startPosition
作为输入参数。在完成整个音频文件时调用此方法,并且每次调用它时,它将环回到Main音频的起始位置。
public void playMedia(int startPos) {
startPos = startPos * 1000;
mMediaPlayer.seekTo(startPos);
isAlreadyPlayed = true;
mMediaPlayer.start();
}
所以你的onCompletionListener
看起来会像这样。
// register onCompletionListener for looping back
mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
// if this is already played then start from starting pos of Main audio
if (isAlreadyPlayed) {
playMedia(getMainAudioStartingPosition());
}
}
});
这样您就可以使用onCompletionListener
设置循环并反复播放媒体文件。
希望它有所帮助!!!
答案 1 :(得分:0)
如果不使用SuperPowered或JUCE这样的C ++库,就无法流畅地播放音频