首页 > 解决方案 > ExoPlayer shuffle 不会重现所有歌曲

问题描述

我正在使用 exoplayer 库创建一个音乐播放器。一切正常,除了不符合我预期的洗牌。

我遇到的问题如下:

假设我有 5 首歌曲:

歌曲 1

歌曲 2

歌曲 3

歌曲 4

歌曲 5

我在第一个。然后我点击 shuffle 按钮并启用 shuffled using exoPlayer.shuffleModeEnabled = true。那么现在的顺序如下:

歌曲 4

歌曲 2

歌曲 5

歌曲 1

歌曲 3

就像我在歌曲 1 中一样,之后它会转到歌曲 3,然后它会在不重现歌曲 4、2 和 5 的情况下完成。我指定的行为是以随机顺序重现所有歌曲。有什么办法可以用 exoplayer 实现吗?

标签: androidexoplayerexoplayer2.x

解决方案


您可以实现自己的 ShuffleOrder 来实现这一点。一种方法是扩展DefaultShuffleOrder类并使用成员字段来存储起始索引(在您的示例中,它应该是歌曲 1)。您应该覆盖以下方法:

getNextIndex(int index)
getPreviousIndex(int index)
getFirstIndex()
getLastIndex()

这个想法是让它成为一个循环列表。在您的示例中,假设洗牌顺序是 4、2、5、1、3 和 1 当前正在播放,您getFirstIndex()应该返回 1,并且getLastIndex()应该返回 5。对于getNextIndex(int index)and getPreviousIndex(int index),做它应该做的事情,但是当你到达头/尾只是循环它。

然后,当您想激活洗牌时,您可以:

concatenatingMediaSource.setShuffleOrder(new MyShuffleOrder());

推荐阅读