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.