Android Media Player选择性循环播放MP3

时间:2015-10-31 20:50:01

标签: android mp3 media-player

这可能吗?在我的特定应用程序中,音轨有一个介绍,应该只在应用程序启动时播放一次。然后音乐将转换到“主音轨”(当然它是所有MP3),但是当音轨结束时,它应该只循环回到介绍结束时的点 - 即,不再播放介绍。

一个更常见的例子是从正面开始的普通歌曲,然后播放歌曲,然后在最后循环合唱以淡出.......

我只能找到一种方法将实际循环设置为开或关 -

musicPlayer.setLooping(true); //No way to set loop points?!

在下图中,循环由虚线表示。

有什么想法吗?

enter image description here

2 个答案:

答案 0 :(得分:1)

创建辅助方法以获取主音轨的startingPositionseekTo()整个音轨(前奏+主音色)结束后的位置。
使用标记来了解它是否是第一次。如果没有,则循环回到获得的搜寻位置。

     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 ++库,就无法流畅地播放音频