【问题标题】:Android Media Player Selective Looping of MP3MP3 的 Android 媒体播放器选择性循环播放
【发布时间】:2015-10-31 20:50:00
【问题描述】:

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

一个更常见的例子是一首普通的歌曲,它从前奏开始,然后播放歌曲,然后在结尾循环合唱以淡出......

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

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

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

有什么想法吗?

【问题讨论】:

  • 为什么不分成两个 mp3 文件?
  • 是的@Luiz,但我要问的是如何无缝地做到这一点?即,检测到一个已完成,以便我可以启动另一个?
  • 如果您有两个单独的 mp3 文件,一个带有前奏,另一个带有主音轨,您需要为前奏 mp3 设置 OnCompletionListener,当它完成时,您开始主音轨。 developer.android.com/intl/pt-br/reference/android/media/…
  • 我明白了,我没想到 - 我会调查一下 - 谢谢!
  • 好的,如果您需要有关该方法的帮助,请告诉我。 ;)

标签: android mp3 media-player


【解决方案1】:

创建一个辅助方法来获取主轨道的startingPosition 和整个轨道(intro + main) 结束后的seekTo() 位置。
使用 标记 可以知道是否是第一次。如果没有,则循环回到获得的搜索位置。

     public int getMainAudioStartingPosition() {
           // position value in int.
           return MAIN_AUDIO_STARTING_POSITION;
     }  

创建另一个以startPosition 作为输入参数的playMedia 方法。在整个音频文件完成时调用此方法,每次调用它时,它都会循环回主音频的起始位置。

    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 设置循环并反复播放媒体文件。

希望对你有帮助!!!

【讨论】:

  • 嗨@PavitraKansara,谢谢,这确实有效,但是这(以及我在从 onCompletion 中启动任何媒体播放器时使用的任何其他方法)会导致循环重新开始之前略有延迟 - 它是大约可能有 1/2 秒的延迟,但听起来很可怕,而且循环之间的过渡也不是很平滑。
【解决方案2】:

如果不使用 SuperPowered 或 JUCE 等 C++ 库,您将无法流畅地循环音频

【讨论】:

    猜你喜欢
    • 2012-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-02
    相关资源
    最近更新 更多