Во время затухания MediaPlayer проигрыватель на некоторое время приостанавливается на некоторых устройствах, в основном на Oreo и Pie - PullRequest
0 голосов
/ 31 октября 2018

Мне нужен эффект кроссфейдинга, когда одна песня заканчивается и начинается другая. Я использовал приведенный ниже код для кроссфейдинга между аудио, и он отлично работает на большинстве устройств, но не работает на некоторых устройствах Samsung, работающих на Oreo, и на одном плюс 6. Их очень маленькая пауза, как только второй медиаплеер начинает воспроизводить следующую песню. Заранее спасибо.

private void crossFade() {
    fadeOut(musicPlayer, CROSSFADE_DURATION);
    fadeIn(musicPlayer2, CROSSFADE_DURATION);
}

public void fadeOut(final MediaPlayer _player, final int duration) {
    final float deviceVolume = getDeviceVolume();
    final Handler h = new Handler();
    h.postDelayed(new Runnable() {
        private float time = duration;
        private float volume = 0.0f;

        @Override
        public void run() {               
            // can call h again after work!
            time -= 100;
            volume = (deviceVolume * time) / duration;
            _player.setVolume(volume, volume);
            if (time > 0)
                h.postDelayed(this, 100);
            else {
                _player.stop();
                _player.release();
            }
        }
    }, 100); // delay (takes millis)


}

public void fadeIn(final MediaPlayer _player, final int duration) {
    final float deviceVolume = getDeviceVolume();
    final Handler h = new Handler();
    h.postDelayed(new Runnable() {
        private float time = 0.0f;
        private float volume = 0.0f;

        @Override
        public void run() {
            if (!_player.isPlaying())
                _player.start();
            // can call h again after work!
            time += 100;
            volume = (deviceVolume * time) / duration;
            _player.setVolume(volume, volume);
            if (time < duration)
                h.postDelayed(this, 100);
        }
    }, 100); // delay (takes millis)

}

1 Ответ

0 голосов
/ 02 ноября 2018

Наконец я решил эту проблему самостоятельно. На самом деле MediaPlayer имеет эту проблему, и о ней давно сообщили в Google, но она все еще не решена (https://issuetracker.google.com/issues/36931073), поэтому мы ничего не можем с этим поделать. Поэтому я использовал Exoplayer для воспроизведения звука, и он работает очень плавно, без пауз.

...