Android Media Player Выборочная зацикливание MP3

Это возможно? В моем конкретном приложении в саундтреке есть вступление, которое должно проигрываться только один раз при запуске приложения. Затем музыка перейдет в "основной трек" (конечно, это все один MP3), но когда трек закончится, он должен вернуться только к тому моменту, когда вступление закончилось, то есть не воспроизводить вступление снова.

Более распространенный пример - обычная песня, которая начинается с вступления, затем воспроизводит песню, а затем в конце зацикливает припев.......

Я могу только найти способ включить или выключить реальный цикл -

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

На приведенной ниже схеме петля представлена ​​пунктирной линией.

Есть идеи? Спасибо!

введите описание изображения здесь

1 ответ

Создайте вспомогательный метод, чтобы получить startingPosition основной дорожки и seekTo() эта позиция после завершения всего трека (intro + main).
Используйте флаг, чтобы узнать, будет ли это в первый раз или нет. Если нет, вернитесь к полученной позиции поиска.

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

Создайте другой метод для playMedia, который принимает startPosition в качестве входного параметра. Вызывайте этот метод после завершения всего аудиофайла, и каждый раз, когда он вызывается, он возвращается к начальной позиции основного аудио, какой бы она ни была.

    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 и воспроизводить медиа-файл снова и снова.

Надеюсь, поможет!!!

Вы не можете плавно зацикливать звук без использования библиотеки C++, такой как https://SuperPowered.com или JUCE.

Другие вопросы по тегам